home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DTP / DTP_TEX / H220.ZIP / MUTEX.ZIP / MTEX.TEX < prev    next >
Text File  |  1990-03-06  |  88KB  |  1,977 lines

  1. %                                                                       %
  2. % Copyright (C) 1986,1987 by Andrea Steinbach and Angelika Schofer      %
  3. %                                                                       %
  4. %                                                                       %
  5. % 10.11.87 \def\hunkglue ge"andert. (welche Auswirkungen hat das,       %
  6. %                ausser dass \two... einen Fehler weniger macht???)     %
  7. % 16.11.87 \def\intslurwidth ge"andert (vor division += \seminhw        %
  8. % 16.11.87 \def\gradientslur ge"andert (vor division += .5\seminhh      %
  9. %                                                                       %
  10. %                                                                       %
  11. \def\fmtname{MTeX}\def\fmtversion{0.92}
  12. \immediate\write10{MTeX Version 0.92 - Release  16 November 1987}
  13. %                                                                       %
  14. %               INHALTSVERZEICHNIS                                      %
  15. %                                                                       %
  16. % Allgemeine Vereinbarungen ......................................... 2 %
  17. % Definitionen der neuen Zeichensaetze .............................. 2 %
  18. % Definitionen der neuen Character .................................. 2 %
  19. % Registerdefinitionen: Count,Box,Dimen usw ......................... 3 %
  20. % Registerinitialisierungen ......................................... 6 %
  21. % Punktierung ....................................................... 7 %
  22. % Hilfsfunktionen - Hilfsmacros ..................................... 8 %
  23. % Macros zur Listenerzeugung und Verarbeitung .......................10 %
  24. % Notenlinien und Hilfslinien .......................................11 %
  25. % Taktstriche u. ae. ................................................12 %
  26. % Das Setzen der Versetzungszeichen .................................13 %
  27. % Versetzungszeichen - Eingabemacros ................................14 %
  28. % Noten              - Eingabemacros ................................14 %
  29. % Pausen             - Eingabemacros ................................14 %
  30. % Wertpunkte ........................................................15 %
  31. % Akkorde            - Eingabemacros ................................16 %
  32. % Konstruktion der Noten und Pausen .................................16 %
  33. % Berechnung der Notenhalslaengen ...................................17 %
  34. % Konstruktion der Notenhaelse ......................................18 %
  35. % Das Setzen der Noten ..............................................18 %
  36. % Tonarten und Aufloesung, Notenschluessel und Taktangabe ...........19 %
  37. % Die Verarbeitung der Nachbarschaften ..............................20 %
  38. % Die Initialisierung der Listen einer Notengruppe ..................20 %
  39. % Abarbeitung und Setzen einer Notengruppe ..........................21 %
  40. % Verbalkung - Eingabemacros ........................................21 %
  41. % Berechnungen der Halslaengen und Steigung .........................22 %
  42. % Plazierung und Zusammensetzung der Balken .........................24 %
  43. % Die Bogen .........................................................25 %
  44. % Akzente fuer Noten und Akkorde ....................................30 %
  45. % Textunterlage .....................................................31 %
  46. % Zweistimmige Notation in einem System .............................33 %
  47. % Beginn und Ende ...................................................33 %
  48. % Defaults ..........................................................34 %
  49. %                                                                       %
  50. %                                                                       %
  51. %      (Seitennummern bei Druck des Makropakets mit 60 Zeilen je Seite) %
  52. %                                                                       %
  53. %                                                                       %
  54. %                                                                       %
  55. %                                                                       %
  56. %                                                                       %
  57. %                                                                       %
  58. %                                                                       %
  59. %                                                                       %
  60. %                                                                       %
  61. %                                                                       %
  62. %                                                                       %
  63. %                                                                       %
  64. %                                                                       %
  65. %                                                                       %
  66. \catcode`@=11
  67. %       **************************************************              %
  68. %       *    Allgemeine Vereinbarungen                   *              %
  69. %       **************************************************              %
  70. \frenchspacing
  71. %\parindent 0pt
  72. % Parameter fuer Notensatz
  73. \def\inisong{\linepenalty10%\linepenalty100
  74.   \pretolerance=-1
  75.   \tolerance=200
  76.   \finalhyphendemerits=-1000
  77.   \hyphenpenalty=-1000
  78.   \exhyphenpenalty=-100
  79.   \doublehyphendemerits=-1000
  80.   \adjdemerits=1000
  81.   \adjdemerits=250
  82.   \interlinepenalty=-10 \inidefaults}%\inidefaults siehe DEFAULTS
  83. %\parfillskip0pt
  84. %       Dimensionen die  in PLAIN TEX eingefuehrt wurden
  85. %\newdimen\p@ \p@=1pt % this saves macro space and time
  86. %\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
  87. %\newskip\z@skip \z@skip=0pt plus0pt minus0pt
  88. %\newbox\voidb@x % permanently void box register
  89. %       **************************************************              %
  90. %       *    Definition der neuen Zeichensaetze          *              %
  91. %       **************************************************              %
  92. \font\music=music16                         %Noten
  93. \font\smallmusic=music16                    %Noten(im Moment noch mit
  94.                                             %\music identisch
  95. \font\beamfont=beam16                       %Balken
  96. \font\slurfont=slur16                       %Bogen
  97. \font\slurfontuu=sluruu16                   %Bogen
  98. \font\slurfontud=slurud16                   %Bogen
  99. \font\slurfontdu=slurdu16                   %Bogen
  100. \font\slurfontdd=slurdd16                   %Bogen
  101. \font\eightrm   =cmr8
  102. %       **************************************************              %
  103. %       *    Definition der neuen Character              *              %
  104. %       **************************************************              %
  105. \catcode`\"=12
  106. \def\hex{"} % zum Eingeben von Zahlen in hex
  107. \def\3{\char"19{}}
  108. \catcode`\"=\active %Unlaute
  109. \def"{\accent'177}
  110. %
  111. \chardef\quart=\hex21                       %Notenkoepfe
  112. \chardef\half=\hex22
  113. \chardef\whole=\hex23
  114. \chardef\eighthup=\hex28                    %Faehnchen
  115. \chardef\eighthdown=\hex2D
  116. \chardef\sixteenthup=\hex29
  117. \chardef\sixteenthdown=\hex2E
  118. \chardef\thirtytwoup=\hex2A
  119. \chardef\thirtytwodown=\hex2F
  120. \chardef\sixtyfourup=\hex2B
  121. \chardef\sixtyfourdown=\hex30
  122. \chardef\hundredtwentyeightup=\hex2C
  123. \chardef\hundredtwentyeightdown=\hex31
  124. \chardef\wholerest=\hex3C                   %Pausen
  125. \chardef\halfrest=\hex3D
  126. \chardef\quartrest=\hex3E
  127. \chardef\eighthrest=\hex3F
  128. \chardef\sixteenthrest=\hex40
  129. \chardef\doublerest=\hex3A                  %Taktpausen
  130. \chardef\ddoublerest=\hex3B
  131. \chardef\fermateup=\hex50                   %Fermaten
  132. \chardef\fermatedown=\hex51
  133. \chardef\mflat=\hex32                       %Versetzungszeichen
  134. \chardef\mdoubleflat=\hex33
  135. \chardef\mquartflat=\hex37
  136. \chardef\mthreequartflat=\hex3A
  137. \chardef\msharp=\hex34
  138. \chardef\mdoublesharp=\hex35
  139. \chardef\mnatural=\hex36
  140. \chardef\mviolin=\hex47                     %Notenschluessel
  141. \chardef\mviolinoct=\hex47
  142. \chardef\mviolinOct=\hex47
  143. \chardef\mbass=\hex49
  144. \chardef\mbassoct=\hex49
  145. \chardef\mbassOct=\hex49
  146. \chardef\mbariton=\hex4D
  147. \chardef\mtenor=\hex4C
  148. \chardef\malt=\hex4B
  149. \chardef\mmezzosopran=\hex4E
  150. \chardef\msopran=\hex4E
  151. \chardef\mC=\hex53                          %Taktangaben
  152. \chardef\allabreve=\hex52
  153. \chardef\mCreverse=\hex54
  154. %       **************************************************              %
  155. %       *    Registerdefinitionen                        *              %
  156. %       **************************************************              %
  157. %1.Hilfsregister
  158. \newbox\hb@i                   % Hilfsbox
  159. \newbox\hb@ii                  % Hilfsbox
  160. \newbox\hb@iii                 % Hilfsbox
  161. \newbox\hb@iv                  % Hilfsbox
  162. \newdimen\hd@i                 % Hilfsdimension
  163. \newdimen\hd@ii                % Hilfsdimension
  164. \newdimen\hd@iii               % Hilfsdimension
  165. \newcount\hc@i                 % Hilfscount
  166. \newcount\hc@ii                % Hilfscount
  167. \newskip\hs@i                  % Hilfsskip
  168. \newskip\hs@ii                 % Hilfsskip
  169. \newskip\hs@iii                % Hilfsskip
  170. \newskip\hs@iv                 % Hilfsskip
  171. \newskip\hs@v                  % Hilfsskip
  172. \newskip\hs@vi                 % Hilfsskip
  173. \newskip\hs@vii                % Hilfsskip
  174. \newtoks\ht@i                  % Hilfstokenregister
  175. %2. Boxes fuer Notenkonstruktionen
  176. \newbox\notebox         %zum Setzen der Noten
  177. \newbox\leftbox         %Akkordnoten links vom Notenhals
  178. \newbox\rightbox        %Akkordnoten rechts vom Notenhals
  179. \newbox\dotbox          %Wertpunkte fuer Akkorde
  180. \newbox\akzentbox       %Akzente
  181. \newbox\hunkbox         %Hunks
  182. \newbox\h@nkbox         %Hunks im zweidimensionalen Satz
  183. \newbox\legerbox        %Hilfslinien
  184. \newbox\firstvoice      %erste Stimme bei Zweistimmiger Notation
  185. \newbox\secondvoice     %zweite Stimme bei Zweistimmiger Notation
  186. \newbox\placebox        %zum Setzen der Taktangabe
  187. \newbox\neighborhood    %Box zum Speichern der Nachbarschaft
  188. %3. Tokenregister
  189. \newtoks\notename       %Noten- oder Pausenwertname
  190. \newtoks\direction      %Richtung des Notenhalses up oder down
  191. \newtoks\d@rection      %Richtung des Notenhalses (global)
  192. \newtoks\cleftoks       %aktueller Notenschluessel
  193. \newtoks\signtoks       %aktuelle  Vorzeichnung
  194. \newtoks\canceltoks     %aktuelle  Aufloesung
  195. \newtoks\slurtoks       %zur Bestimmung des Charactercodes fuer Bogen
  196. \newtoks\ta             %fuer Listenverarbeitung ....
  197. \newtoks\tb             % .... bei \rightappend
  198. %4.Umgebungen
  199. \newif\iffirst          %erste Zeile Zeilenanfang: Initialisierung von
  200.                         %Notenschluessel, Tonart und Taktart
  201. \newif\ifbeam           %Verbalkung
  202. \newif\ifchord          %Akkord
  203. \newif\ifleft           %Plazieren der Akkordnoten links vom Notenhals
  204. \newif\ifstemup         %Notenhalsrichtung aufwaerts
  205. \newif\ifgroup          %Initialisierung der Nachbarschaftslisten
  206. \newif\iftwo            %zweistimmiger Notensatz
  207. \groupfalse\chordfalse\leftfalse\beamfalse\groupfalse\twofalse
  208. %5.Countregister
  209. \newcount\dur@tion
  210. %     \dur@tion           Notenwert
  211. %          0                   1/1
  212. %          1                   1/2
  213. %          2                   1/4
  214. %          3                   1/8
  215. %          4                   1/16
  216. %          5                   1/32
  217. %          6                   1/64
  218. %          7                   1/128
  219. \newcount\pitch                % interne Tonhoehe
  220. \newcount\pit@                 % interne Hilfstonhoehe
  221. \newcount\oldpitch             % interne Tonhoehe
  222. \global\oldpitch=0             % Anfangsbelegung
  223. \newcount\maxpitch             % maximale interne Tonhoehe bei Akkord
  224. \newcount\minpitch             % minimale interne Tonhoehe bei Akkord
  225. \newcount\nn                   % Anzahl der Hilfslinien
  226. \newcount\clefcount            % Parameter Verschieben der Vorzeichnung
  227.                                % abhaengig von Notenschluessel
  228. \newcount\accpitch             % Vozeichnungs Tonhoehe
  229.  %Nachbarschaften: Balken- und Bogengruppen
  230. \newcount\tieconst             % Konstante fuer Hoehe des Bogenstuecks
  231.                                % fuer Haltebogen
  232. \newcount\phraseconst          % konstantes Bogenstueck bei Phrasierungs-
  233.                                % bogen
  234. \newcount\n@a                  % Index 1.Element einer Gruppe
  235. \newcount\n@i                  % Laufindex in der Gruppe
  236. \newcount\n@e                  % Index letztes Element einer Gruppe
  237. \newcount\N                    % Kardinalitaet der Nachbarschaft
  238. \newcount\m@i                  % Listenindex
  239. \newcount\m@ii                 % Listenindex
  240. \newcount\L@                   % Laenge des Balkens in 0.5pt
  241. \newcount\l@                   % zur Zusammensetzung des Balkens
  242. \newcount\m@a\newcount\m@e     % Anfangs- und Endindex der Elementliste
  243.                                % die durch einen Balken verbunden werden
  244.                                % sollen
  245. \newcount\P@i                  %lok. pitch, der in endpoint benutzt wird
  246. \newcount\P@a                  %Anfangspitch
  247. \newcount\P@e                  %Endpitch
  248. \newcount\beamrow              %Korrektur von vpos bei mehrfachverb.
  249. \newcount\S                    % Steigung
  250. \newcount\S@                   % Absolutbetrag der Steigung
  251. \newcount\slurwidth            % Ganzzahlige Breite eines Bogens in
  252.                                % Einheiten von \nhw
  253. \newcount\V@int                % Ganzzahlige Hoehe  eines Bogens in
  254.                                % Einheiten von 1/2\nhh
  255. \newcount\CODE                 % Charcode Steigung von Balken
  256. \newcount\flaga                % Werte 0,1,2  Bogenanfang
  257. \newcount\flagb                % Werte 0,1,2  Bogenende
  258. \newcount\flagc                % Balkensteigung = 0           ja/nein
  259. %6.Dimensionsregister
  260. %Konstanten
  261. \newdimen\linethickness        % Dicke einer Notenlinie
  262. \newdimen\nhh                  % Linienabstand, noteheadheight
  263. \newdimen\nhw                  % Notenkopfbreite, noteheadwidth
  264. \newdimen\seminhh              % halber Linienabstand   = 1/2\nhh
  265. \newdimen\seminhw              % halbe  Notenkopfbreite = 1/2\nhw
  266. \newdimen\twonhh               % = 2\nhh
  267. \newdimen\I@@                  % = 100pt
  268. \newdimen\stemwidth            % = 2\linethickness
  269. \newdimen\beamthickness        % = 0.6 \nhh
  270. \newdimen\staffheight          % = 4\nhh + \linehight
  271. \newdimen\textline             % = \staffheigth, Abstand Schriftlinie --
  272.                                % Grundlinie bei Textunterlage
  273. \newdimen\linekern             % \nhh - \linethickness,kern zw.den Zeilen
  274. \newdimen\Linekern             % \nhh -2\linethickness,kern zw.den Zeilen
  275.                                % bei Hilfslinien
  276. \newdimen\dotwd                % Breite eines Verlaengerungspunktes
  277. \newdimen\smkern               % kleiner Kern zur Korrektur vor und
  278.                                % nach Notenkoepfen (Hilfslinien)
  279. %Parameter
  280. \newdimen\yshift               % dimen!, um die die Vorzeichen verschoben
  281.                                % werden in Y-Richtung!
  282. \newdimen\nyshift              % dimen!, um die die NOTENbox   verschoben
  283.                                % wird in Y-Richtung!
  284. \newdimen\lyshift              % dimen!, um die die LEGERbox   verschoben
  285.                                % wird in Y-Richtung!
  286. \newdimen\akzent@pos           %vertikale Positionierung eines
  287.                                %Artikulationszeichens
  288.  %Nachbarschaften: Balken- und Bogengruppen
  289. \newdimen\s@a                  %Anfangstemlength
  290. \newdimen\s@e                  %Endstemlength
  291. \newdimen\minsl                %untere Grenze f. Stemverkuerzung
  292. \newdimen\R@i                  % rel. Hoehe des Notenkopfes pitch*seminhh
  293. \newdimen\E@a                  % Endpunkt des Notenhalses Anfangsnote
  294. %                                pitch*seminhh +(-)stemlength
  295. \newdimen\R@a                  % rel. Hoehe des Notenkopfes pitch*seminhh
  296. \newdimen\E@e                  % Endpunkt des Notenhalses Endnote
  297. %                                pitch*seminhh +(-)stemlength
  298. \newdimen\R@e                   % relative Hoehe des Notenkopfes
  299. \newdimen\s@i                   %lok. stemlength, in endpoint
  300. \newdimen\Abs                   %Absoluter Abstand zwischen 2 Endpunkten
  301. \newdimen\corr                  %Korrekturwert fuer 2. Stem
  302. \newdimen\sl@c                  %4.Korrekturwert fuer Stemlaengen
  303. \newdimen\EP@                  %Endpunkt des ersten Stems einer Notengr.
  304. \newdimen\EP@i                 %Endpunkt des Stems innerhalb einer Gruppe
  305. \newdimen\E@l                  % Unterer Startpunkt fuer Bogenansatz
  306. \newdimen\E@u                  % oberer Startpunkt fuer Bogenansatz
  307. \newdimen\H@e                  % horizontaler Abstand zwischen zwei Noten
  308. \newdimen\H@a                  % Korrekturwert zur Berechnung von H@e
  309. \newdimen\H@a@cor              % Korrekturwert zur Berechnung der Laenge
  310.                                % Balkens oder Bogens (bzgl. H@list)
  311. \newdimen\H@e@cor              % Korrekturwert zur Berechnung der Laenge
  312.                                % Balkens oder Bogens (bzgl. H@list)
  313. \newdimen\limit                %\limit = 0.45\H@e=Grenzwert
  314. \newdimen\V@                   %vertikaler Abstand zwischen zwei Noten
  315. \newdimen\gradfactor           %= 0.005\S\p@
  316. \newdimen\SHIFT
  317. \newdimen\slurcor              % horizontal Kern fuer Bogenpositionierung
  318. \newdimen\H@m@a                % Horizontaler Abschnitt von m@a
  319. \newdimen\L@a                  % Balkenlaenge
  320. \newdimen\V@a                  % vertikale Position des Balkens
  321. \newdimen\stemlength           % Laenge des Notenhalses
  322. \newdimen\linelength           % Laenge der Notenlinien
  323. %Textunterlage
  324. \newdimen\overtext             % fuer Textueberlage
  325. \newdimen\undertext            % fuer Textunterlage
  326. %6. Skipregister
  327. % Ausschlussparamter
  328. \newskip \NOTEskip             % Glue nach ganzer Note
  329. \newskip \Noteskip             % Glue nach halber Note
  330. \newskip \noteskip             % Glue nach 1/4    Note
  331. \newskip \notEskip             % Glue nach 1/8    Note
  332. \newskip \noTEskip             % Glue nach 1/16   Note
  333. \newskip \nOTEskip             % Glue nach 1/32   Note
  334. \newskip \nOteskip             % Glue nach 1/64   Note
  335. \newskip \nOtEskip             % Glue nach 1/128  Note
  336. \newskip \ruleskip             % Glue nach Rules
  337. \newdimen\hunkskip             % Glue fuer Hunks
  338. \newskip\oldskip               % aktueller \spaceskip vor Nachbarschaft
  339. %       **************************************************              %
  340. %       *    Registerinitialisierungen                   *              %
  341. %       **************************************************              %
  342. \beamfont \beamthickness = 1ex
  343. \music    \nhh           = 1ex  \nhw     = 1em
  344.           \seminhh  = 0.5\nhh   \seminhw = 0.5\nhw
  345.           \twonhh   = 2 \nhh
  346. \I@@     = 100 pt
  347. \linethickness = 0.15pt
  348. \stemwidth     = 2\linethickness
  349. \staffheight   = 4 \nhh \advance\staffheight by \linethickness
  350. \linekern      =   \nhh \advance\linekern    by-\linethickness
  351. \Linekern      =   \nhh \advance\Linekern    by-2\linethickness
  352. \overtext  =\staffheight \advance\overtext by\nhh
  353. \def\u@text{\relax}\def\l@text{\relax}
  354. \textline =\staffheight
  355. \undertext =\textline
  356. \tieconst = 4 \phraseconst = 2
  357. \def\up@{up}\def\down@{down}
  358. %       **************************************************              %
  359. %       *    Punktierung                                 *              %
  360. %       **************************************************              %
  361. %1.Ausschluss-schemata
  362. \let\sk=\spaceskip
  363. %\ruleskip  = \seminhw plus \seminhw minus 0.5\seminhw
  364. \ruleskip  = \nhw plus \seminhw minus \seminhw
  365. \smkern = 0.2\nhw \relax
  366. \def\hsmall{%hader
  367. \Noteskip 3\nhw plus 2\seminhw minus 2\seminhw
  368. \NOTEskip = \Noteskip
  369. \noteskip 2\nhw plus 1.5\seminhw  minus 1.5\seminhw
  370. \notEskip 1\nhw plus \seminhw  minus \seminhw
  371. \noTEskip \z@ plus 0.5\seminhw  minus \z@
  372. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  373. \hunkskip \z@\relax}
  374. \def\small{%
  375. \Noteskip 3.5\nhw plus 1.8\seminhw minus 1.8\seminhw
  376. \NOTEskip = \Noteskip
  377. \noteskip 2.5\nhw plus 1.4\seminhw  minus 1.4\seminhw
  378. \notEskip 1.5\nhw plus \seminhw  minus \seminhw
  379. \noTEskip \seminhw plus 0.6\seminhw  minus 0.6\seminhw
  380. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  381. \hunkskip \z@ \relax}
  382. \def\universal{%
  383. \Noteskip 4\nhw plus 1.6\nhw minus 1.6\nhw
  384. \NOTEskip = \Noteskip
  385. \noteskip 3\nhw plus 1.3\nhw  minus 1.3\nhw
  386. \notEskip 2\nhw plus \nhw  minus \nhw
  387. \noTEskip \nhw plus 0.6\nhw  minus 0.6\nhw
  388. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  389. \hunkskip \z@ \relax}
  390. \def\wide{%
  391. \Noteskip 4\nhw plus 1.42\nhw minus 1.42\nhw
  392. \NOTEskip = \Noteskip
  393. \noteskip 3.5\nhw plus 1.28\nhw  minus 1.28\nhw
  394. \notEskip 2.5\nhw plus \nhw  minus \nhw
  395. \noTEskip 1.5\nhw plus 0.9\nhw  minus 0.9\nhw
  396. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  397. \hunkskip \z@ \relax}
  398. \def\loose{%
  399. \Noteskip 5\nhw plus 1.5\nhw minus 1.5\nhw
  400. \NOTEskip = \Noteskip
  401. \noteskip 4\nhw plus 1.25\nhw  minus 1.25\nhw
  402. \notEskip 3\nhw plus \nhw  minus \nhw
  403. \noTEskip 2\nhw plus 0.75\nhw  minus 0.75\nhw
  404. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  405. \hunkskip \z@\relax}
  406. %1.Glue-Makros
  407. \def\hunkglue{\hunkskip=\sk\relax\advance \hunkskip by -\wd\hunkbox
  408.   \ifdim\hunkskip>\z@ \hunkskip=\wd\hunkbox\relax
  409. % \else \hunkskip=\sk \advance\hunkskip-\seminhw\relax \fi}%schm 10.11.87
  410.   \else \hunkskip=\sk                           \relax \fi}%schm 10.11.87
  411. %Glue vor einer Rule (Taktstrich etc.)
  412. \def\gluebrule{\hunkglue\nobreak\ \hskip-\hunkskip\box\hunkbox%
  413.  \u@text\l@text\nobreak}
  414. %Glue vor einer Taktangabe
  415. \def\gluebmeter{\hunkglue\kern\seminhw\nobreak\box\hunkbox%
  416.  \u@text\l@text\nobreak}
  417. %Glue nach einer Rule (Taktstrich etc.)
  418. \def\gluearule{\-\global\sk\ruleskip}
  419. \def\set@rulesk{\global\sk\ruleskip}
  420. %Glue vor einer Note
  421. \def\sethunkglue{\hunkglue\nobreak\ \hskip-\hunkskip}
  422. %Umbruchm"oglichkeit im Taktinnern
  423. \def\+{\ \-\global\sk=\z@skip}
  424. %       **************************************************              %
  425. %       *    Hilfsfunktionen                             *              %
  426. %       **************************************************              %
  427. %entspricht dem von Knuth angegebenen Makro der \loop-Schleife, jedoch
  428. %wird die Schleife bei \else wiederholt.
  429. \def\looop#1\leave{\def\boddy{#1}\iiterate}
  430. \def\iiterate{\boddy \let\nexxt\relax \else\let\nexxt\iiterate\fi \nexxt}
  431. \let\leave=\fi % this makes \looop...\if...\leave skippable
  432. % entspricht |#1 - #2|
  433. \def\distance#1#2{\relax\ifdim#1>#2\relax\Abs=#1\advance\Abs by-#2\relax
  434.                     \else\Abs=#2\advance\Abs by-#1\relax\fi}
  435. %Notensetzen, z.B. Ineinanderschieben von Hilfslinienbox und Notenbox
  436. %Breite des Boxinhalts wird ignoriert
  437. \def\cbox#1{\hbox to \z@{\hss#1\hss}} % zentriert den Inhalt der Box
  438. \def\hboxnhw#1#2{\hbox to \nhw{\hss\cbox{#1}\cbox{#2}\hss}}
  439.                                       %Box der Breite eines Notenkopfes
  440. \def\ignore#1{\hbox to \z@{\hss#1}}   % entspricht \llap in PLAIN
  441.                             %z.B. fuer Oktavierung des Versetzungszeichen
  442. %Rules fuer Phrasierungen
  443. \def\r@lef@ill#1{\leaders\hrule height \z@ depth #1 \relax\hfill}
  444. \def\r@lef@ll#1{\leaders\hrule height #1 depth \z@ \relax\hfill}
  445. %zum Setzen der Phrasierungsboegen
  446. \def\vt@@#1{\vtop to\z@{\offinterlineskip\null\hbox{#1}\vss}}
  447. \def\vb@@#1{\vbox to\z@{\offinterlineskip\vss\hbox{#1}\null}}
  448. % Korrekturfunktionen fuer Berechnung der Halslaenge
  449. \def\corra#1{\relax \ifdim\Abs>\seminhh
  450.                       \ifdim#1>\minsl \advance #1 by -\seminhh\fi
  451.                     \fi}
  452. %1. Verkuerzung, des hoeherliegenden(stemup) bzw. tieferliegenden
  453. %(stemdown) Notenhalses um \seminhh falls moeglich(Abstand>\seminhh)
  454. \def\corrb#1{\advance #1 by \corr}
  455. %2. Verlaengerung des anderen Notenhalses um Hoechstabstand zu
  456. %erreichen
  457. \def\corrc#1{\advance #1 by \seminhh}
  458. %3. p1^=p2 Abstand =0 : Verkuerzung des Notenhalses der tiefer (hoeher)
  459. %gelegenen Note um \seminhh
  460. %
  461. %Funktionen die die vertikalen Abstaende
  462. %der Bogenendpunkte von der Grundlinie berechnen
  463. %dabei ist E@u der Ansatz des oberhalb verlaufenden Bogens
  464. %und       E@l der Ansatz des unterhalb verlaufenden Bogens
  465. %Punkte fuer Akkorde (oberhalb/unterhalb)
  466. \def\chordupperstartpoints{%
  467.   \global\E@u\maxpitch\seminhh \global\advance\E@u\nhh
  468.   \ifdim\E@u<\z@ \global\advance \E@u-\I@@
  469.            \else \global\advance \E@u \I@@ \fi}
  470. \def\chordlowerstartpoints{%
  471.   \global\E@l\minpitch\seminhh \global\advance\E@l-\nhh
  472.   \ifdim\E@l<\z@ \global\advance \E@l-\I@@
  473.            \else \global\advance \E@l \I@@ \fi}
  474. \def\whatisnewstartpoint{%
  475.     \ifdim\E@a=\z@ \global\E@a = 1sp \fi
  476.     \ifstemup\relax
  477.           \expandafter\exchange\the\E@a\in\uslurlist\at \n@a
  478.         \else \relax
  479.           \expandafter\exchange\the\E@a\in\lslurlist\at \n@a
  480.         \fi
  481.      }
  482. %neue Ansatzwerte E@l E@u berechnen und an \n@i-te Stelle  der
  483. %    \lslurlist bzw. \uslurlist setzen (NACH Balkenberechnung)
  484. \def\whatarenewstartpoints{%
  485.     \ifdim\EP@i=\z@ \global\EP@i = 1sp \fi
  486.     \ifstemup\relax
  487.           \expandafter\exchange\the\EP@i\in\uslurlist\at \n@i
  488.         \else \relax
  489.           \expandafter\exchange\the\EP@i\in\lslurlist\at \n@i
  490.         \fi
  491.     }
  492. % belegt #2 mit dem Endpunkt des Notenhalses des #1-ten Elementes der
  493. % Notengruppe
  494. \def\getendpoint#1#2{\relax\hc@i=#1%
  495.     \lokalassign\hc@i\of\H@list\to\hd@i
  496.     \lokalassign\hc@i\of\H@corlist\to\hd@ii
  497.     \select\hc@i\of\dir@list\to\dir@i
  498.     \ifx\dir@i\down@ \advance\hd@ii\nhw \fi
  499.     \advance\hd@i by-\hd@ii
  500.     \advance\hd@i by-\H@a  \multiply\hd@i by\S \hd@i=0.01 \hd@i
  501.     \advance\hd@i by\EP@        %EP@ = Endpunkt @ n@a
  502.     \global#2=\hd@i}
  503. %
  504. % Weist \S die im Balken- / Bogenfont vorhandene  Steigung zu
  505. \def\addC{\global\advance\CODE by }
  506. \def\assignS{%
  507.     \ifnum\S<0 \S@=-\S \else \S@=\S \fi
  508.     \ifnum\S@< 1 \S@=0          \else
  509.     \ifnum\S@< 8 \S@=5   \else
  510.     \ifnum\S@<12 \S@=10  \else
  511.     \ifnum\S@<17 \S@=15  \else
  512.     \ifnum\S@<22 \S@=20  \else
  513.     \ifnum\S@<27 \S@=25  \else
  514.     \ifnum\S@<32 \S@=30  \else
  515.     \ifnum\S@<40 \S@=35  \else \S@=45\fi\fi\fi\fi\fi\fi\fi\fi
  516.     \ifnum\S<0\global\S=-\S@ \else\global\S=\S@\fi}
  517. % Berechnet den Code der Steigung  im Bogenfont
  518. \def\assignCODE{%
  519.     \ifnum\S< 0 \global\CODE = 64 \S@ = -\S \else \S@ = \S
  520.                                              \global\CODE = 0 \fi
  521.     \ifnum\S@< 6  \addC 0 \else
  522.     \ifnum\S@<11  \addC 8 \else
  523.     \ifnum\S@<16  \addC16 \else
  524.     \ifnum\S@<21  \addC24 \else
  525.     \ifnum\S@<26  \addC32 \else
  526.     \ifnum\S@<31  \addC40 \else
  527.     \ifnum\S@<36  \addC48 \else
  528.     \ifnum\S@<46  \addC56 \fi\fi\fi\fi\fi\fi\fi\fi}
  529. %Im Moment benutzte Steigungen
  530. %5 10 15 20 25 30 35 45
  531. \def\assignuslurchar{\hc@i=\slurwidth
  532.   \ifnum\V@int= 0 %\V@=\z@
  533.   \ifnum\hc@i>1 \advance\hc@i-2 \else \advance\hc@i-1 \fi
  534.      \edef\slurchar{\the\hc@i}%
  535.   \else
  536.     \ifnum\slurwidth<4 \multiply\hc@i\slurwidth
  537.       \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
  538.       \multiply\hc@i8\edef\slurchar{\the\hc@i}%
  539.     \else\advance\hc@i-2 \hc@ii=\V@int\advance\hc@ii-1
  540.      \ifodd\hc@i\divide\hc@i2
  541.      \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
  542.      \else \divide\hc@i 2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
  543.     \fi
  544.   \fi\slurtoks=\expandafter{\slurchar}}
  545. \def\assignlslurchar{\hc@i=\slurwidth
  546.   \ifnum\V@int= 0 %\V=\z@
  547.     \ifnum\hc@i>1\advance\hc@i14 \else\advance\hc@i15 \fi
  548.     \edef\slurchar{\the\hc@i}%
  549.   \else
  550.     \ifnum\slurwidth<4 \multiply\hc@i by \slurwidth
  551.       \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
  552.       \multiply\hc@i8\edef\slurchar{\noexpand\the\hc@i}%
  553.     \else\advance\hc@i-2\hc@ii=\V@int\advance\hc@ii-1
  554.      \ifodd\hc@i\divide\hc@i2
  555.      \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
  556.      \else \divide\hc@i2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
  557.     \fi
  558.   \fi\slurtoks=\expandafter{\slurchar}}
  559. %       **************************************************              %
  560. %       *  Macros zur  Listenerzeugung und Verarbeitung  *              %
  561. %       **************************************************              %
  562. %\newtoks\ta\newtoks\tb
  563. %Haengt an Liste #2 ein neues Element mit Inhalt #1 an
  564. \long\def\rightappend#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}%
  565.   \edef#2{\the\tb\the\ta}}
  566. %Weist dem Register (Counter oder Dimension oder Skip ) den Wert des
  567. %#1-ten Elementes der Liste #2 zu (lokal bzw.  global)
  568. \def\assign#1\of#2\to#3{\m@i=#1\relax
  569.   \long\def\\##1{\advance\m@i-1\relax             % globale Zuweisung
  570.   \ifnum\m@i=0\relax\global#3=##1\fi}#2\relax}
  571. %
  572. \def\lokalassign#1\of#2\to#3{\m@i=#1\relax     % lokale Zuweisung
  573.  \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax#3=##1\fi}#2\relax}
  574. %
  575. %Definiert die Kontrollsequenz #3 als den Inhalt des
  576. %#1-ten Elementes der Liste #2 zu (lokal).
  577. \def\select#1\of#2\to#3{\m@i=#1\relax     % lokale Zuweisung
  578.  \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax\def#3{##1}\relax
  579.  \fi}#2\relax}
  580. %
  581. %setzt #1=Anzahl der Elemente einer Liste
  582. \def\cardinality#1\to#2{#2=0\long\def\\##1{\advance#2 by 1 }#1}
  583. %
  584. %Tauscht in Liste #2 den Inhalt des #3-ten Elementes gegen #1 aus.
  585. \def\exchange#1\in#2\at#3{\m@i=#3\long\def\\##1{\advance\m@i-1
  586.   \ifnum\m@i=0 \rightappend{#1}\to\helplist
  587.         \else\rightappend##1\to\helplist\fi}#2%
  588.   \let\hhelplist=\helplist\global\let#2=\hhelplist\let\helplist=\empty
  589.   }
  590. %abhaengig von der Notenkonstellation Abfrage auf  \S=0
  591. \def\gradz@\in#1\with#2#3\from#4\to#5{\m@i=#4\m@ii=#5\relax
  592.   \advance\m@i 1 \advance\m@ii -1
  593.   \long\def\\##1{\advance\m@i-1\advance\m@ii-1
  594.   \ifnum\m@i<1 \ifnum\m@ii>-1 \hc@i=##1\relax
  595.   \ifnum\hc@i#2#3 \relax \else
  596.    \global\flagc=0 \ifnum\hc@i#2 4 \relax \else \global\minsl=\twonhh\fi
  597.   \fi\fi\fi}#1}
  598. %
  599. %addiert den Wert von \sl@c zum Wert in Liste #1 von Element #2 bis #3
  600. \def\addslc\in#1\from#2\to#3{\m@i=#2\m@ii=#3\long\def\\##1{\advance\m@i-1
  601.   \advance\m@ii-1
  602.   \ifnum\m@i<1 \ifnum\m@ii>-1 \hd@i=##1 \advance\hd@i\sl@c
  603.   \expandafter\rightappend\the\hd@i\to\helplist\else
  604.   \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}#1%
  605.   \let\hhelplist=\helplist\global\let#1=\hhelplist\let\helplist=\empty}
  606. %
  607. %wechselt die Richtungen der Notenh"alse in der \dir@list vom
  608. %#2-ten  bis zum #3-ten Element gegen #1 aus.
  609. \def\putdir#1\from#2\to#3{\m@i=#2\m@ii=#3\def\helplist{}%
  610. \long\def\\##1{\advance\m@i-1
  611.   \advance\m@ii-1
  612.   \ifnum\m@i<1 \ifnum\m@ii>-1
  613.   \expandafter\rightappend#1\to\helplist\else
  614.   \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}%
  615.   \dir@list%
  616.   \let\hhelplist=\helplist\global\let\dir@list
  617.     =\hhelplist\let\helplist=\empty}
  618. %
  619. %Ersetzt den Inhalt des #4-ten Elementes der Liste #3 durch
  620. %#1 Inhalt #2
  621. \def\additem#1#2\in#3\at#4{\m@i=#4\long\def\\##1{\advance\m@i-1 \relax
  622.   \ifnum\m@i=0\ht@i{##1}\edef\h@@@{#1\the\ht@i#2}\expandafter
  623.   \rightappend\h@@@\to\helplist\else\rightappend##1\to\helplist\fi}#3%
  624.   \let\hhelplist=\helplist\global\let#3=\hhelplist\let\helplist=\empty
  625.   }
  626. %       **************************************************              %
  627. %       *    Notenlinien und Hilfslinien                 *              %
  628. %       **************************************************              %
  629. \def\nobaselines{\baselineskip=\z@ \lineskip=\z@ \lineskiplimit=\z@}
  630. %\baselinesa und \baselinesb = zwei Verschiedene M"oglichkeiten f"ur
  631. % die Interline Glue Wahl.
  632. \def\baselinesa{%
  633.   \baselineskip=2\staffheight plus \staffheight minus  .5\staffheight
  634.   \lineskip=0.5\staffheight plus \staffheight minus  .5\staffheight
  635.   \lineskiplimit=0.5\staffheight}
  636. \def\baselinesb{%
  637.   \baselineskip=3\staffheight plus \staffheight minus  .5\staffheight
  638.   \lineskip=0.5\staffheight plus \staffheight minus  .5\staffheight
  639.   \lineskiplimit=0.5\staffheight}
  640. %Notenlinie
  641. \def\hr{\hrule height\linethickness depth \z@ width \linelength}
  642. %Notenlinie und Zwischenraum
  643. \def\hrv{\hr\kern\linekern}
  644. %Hilfslinie
  645. \def\HRULE{\hrule height\linethickness depth\linethickness width \twonhh}
  646. %Hilfslinie und Zwischenraum fuer Hilfslinien unterhalb des Systems
  647. \def\KHR{\kern\Linekern\HRULE}
  648. %Hilfslinie und Zwischenraum fuer Hilfslinien oberhalb des Systems
  649. \def\HRK{\HRULE\kern\Linekern}
  650. %Liniensystem
  651. \def\lines{\linelength=\hsize
  652.   \hbox to \z@{\vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
  653. %Liniensystem fuer erste Zeile unter Ber"ucksichtigung des \parindent
  654. \def\firstlines{\hbox to \z@{\linelength=\hsize\advance\linelength by
  655.   -\parindent \vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
  656. %
  657. %macros, die die Hilfslinienbox herstellen zur zugeho"rigen Note
  658. %\nn = Anzahl der ben"otigten Hilfslinien
  659. %formel: \pitch<0 \nn=-\pitch/2, \pitch>8 \nn=(\pitch-8)/2, \nn=0 sonst
  660. \def\legerlines{\leger@cal\ifnum\nn=0 \global\setbox\legerbox\null%
  661.   \else\relax\ifnum\pitch<0 \global\setbox\legerbox=\vtop{\leger@line}%
  662.   \else\global\setbox\legerbox=\vbox{\leger@line}\fi\fi}
  663. \def\leger@line{\begingroup \loop \ifnum \nn>0 \aftergroup \HR
  664.   \advance\nn-1 \repeat \endgroup}
  665. \def\leger@cal{\ifnum\pitch<-1 \nn =-\pitch \lyshift =\z@ \let\HR=\KHR
  666.   \else\relax\ifnum\pitch<10 \nn = 0      \lyshift =\z@
  667.   \else\nn=\pitch\advance\nn-8 \lyshift=4\nhh%\staffheight-\linethickness
  668.   \let\HR=\HRK
  669.   \fi\fi \divide \nn by 2 }
  670. %Hilfslinien bei Akkorden
  671. \def\chordlegerlines{%
  672.   \ifleft
  673.   \global\setbox\leftbox=
  674.   \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\leftbox}%
  675.   \else
  676.   \global\setbox\rightbox=
  677.   \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\rightbox}%
  678.   \fi}
  679. %       **************************************************              %
  680. %       *    Taktstriche u. a".                          *              %
  681. %       **************************************************              %
  682. %Striche
  683. %Atemzeichen
  684. \def\caesurasign{\vrule height4.5\nhh depth-3.5\nhh width3\linethickness}
  685. %schmaler Strich: Taktstrich
  686. \def\thinvrule{\vrule height\staffheight depth \z@ width2 \linethickness}
  687. %dicker Strich:
  688. \def\thickvrule{\vrule height\staffheight depth \z@ width 0.5\nhh}
  689. %Doppelpunkt fuer Wiederholungszeichen:
  690. \def\doppelpunkt{%
  691.   \hbox{\vrule height 2.6\nhh depth-2.4\nhh width 0.2\nhh\kern-0.2\nhh
  692.   \vrule height 1.6\nhh depth-1.4\nhh width 0.2\nhh}}
  693. %zu Taktstrichen zusammengesetzte Striche:
  694. \def\doppelstrich{\thinvrule\kern.25\nhw\thinvrule}
  695. \def\schlussstrich{\thinvrule\kern\seminhw\thickvrule}
  696. %wiederholungszeichen mit Doppelpunkt links
  697. \def\repstrich{\doppelpunkt\kern\seminhw
  698.   \thinvrule\kern\seminhw\thickvrule}
  699. %wiederholungszeichen mit Doppelpunkt rechts
  700. \def\revrepstrich{\thickvrule\kern\seminhw\thinvrule\kern\seminhw
  701.   \doppelpunkt}
  702. %
  703. %taktstriche mit Glue
  704. \def\|{\gluebrule\thinvrule\gluearule}
  705. \def\={\gluebrule\schlussstrich\gluearule\null}
  706. \def\doublebarline{\gluebrule\doppelstrich\gluearule\null}
  707. \def\rightrepeat{\gluebrule\repstrich\gluearule\null}
  708. \def\leftrepeat{\gluebrule\thinvrule\-\revrepstrich\nobreak}
  709. \def\leftrightrepeat{\gluebrule\repstrich\-%
  710.   \kern-\seminhw\revrepstrich\global\sk\ruleskip}
  711. %
  712. % Makro fuer Orientierungszeichen
  713. \def\boxed#1{\setbox0=\hbox{$\displaystyle{#1}$}\hbox{\lower.4pt\hbox{\lower
  714.    3pt\hbox{\lower 1\dp0\hbox{\vbox{\hrule height .4pt \hbox{\vrule width
  715.    .4pt \hskip 3pt\vbox{\vskip 3pt\box0\vskip3pt}\hskip 3pt \vrule width
  716.       .4pt}\hrule height .4pt}}}}}}
  717. %Kaesten
  718. \def\1#1\2#2\*{\def\f@rsttime{#1*}\def\s@condtime{#2*}%
  719.   \expandafter\evalfirst\f@rsttime!!!%
  720.   \ifx\interim\empty \nobreak\box@@@\else
  721.     \looop\expandafter\evalinterim\interim!!!%
  722.        \ifx\interim\empty\relax\nobreak\box@@@\leave\fi
  723.   \expandafter\evalsecond\s@condtime!!!%
  724.   \ifx\interim\empty \relax\else
  725.     \looop\expandafter\evalinterim\interim!!!%
  726.        \ifx\interim\empty\relax\leave\fi
  727. }
  728. \def\evalfirst#1*#2!!!{\def\interim{#2}\penalty-1000\box@{#1}}
  729. \def\evalinterim#1*#2!!!{\def\interim{#2}\penalty-1000\box@@{#1}}
  730. \def\evalsecond#1*#2!!!{\def\interim{#2}\penalty-1000\box@@@@{#1}}
  731. \def\box@#1{\let\setlines\relax\gluebrule
  732.   \vbox{\halign{##\cr\repbox{1.}\r@lef@ll{\linethickness}\cr
  733.                 \noalign{\nointerlineskip}%
  734.                 \repstrut\thinvrule\gluearule#1\cr}}%
  735.   \let\setlines=\s@tlines}
  736. \def\box@@#1{\let\setlines\relax
  737. \vbox{\halign{##\cr\r@lef@ll{\linethickness}\cr
  738.                 \noalign{\nointerlineskip}\repstrut#1\cr}}%
  739.   \let\setlines=\s@tlines}
  740. \def\box@@@{\vbox{\halign{##\cr\r@lef@ll{\linethickness}\repbox{}\cr
  741.                 \noalign{\nointerlineskip}%
  742.           \repstrut\setgluebrule\doppelpunkt\kern\seminhw\thinvrule\cr}}}
  743. \def\box@@@@#1{\let\setlines\relax\vbox{\tabskip\seminhw
  744.                \halign{##\tabskip\z@\cr
  745.                 \repbox{2.}\r@lef@ll{\linethickness}\cr
  746.                 \noalign{\nointerlineskip}%
  747.                 \repstrut\thickvrule\setgluearule#1\cr}}%
  748.   \let\setlines=\s@tlines}
  749. \def\repbox#1{\vtop to\z@{\null\nointerlineskip
  750.   \hbox to \z@{\vrule height10pt depth -\nhh width\stemwidth{#1}\hss
  751.   }\vss}}
  752. \def\repstrut{\vrule width \z@ height 7\nhh depth\z@}
  753. \def\overstrut{\vrule width \z@ height 6\nhh depth\z@}
  754. %\let\overstrut=\repstrut
  755. %
  756. %       **************************************************              %
  757. %       *    SETZEN der VERSETZUNGSZEICHEN               *              %
  758. %       **************************************************              %
  759. %Setzen der Versetzungszeichen vor Noten:
  760. \def\setvorz#1{\relax\setbox \hunkbox=\hbox{\unhbox\hunkbox%
  761.   \global\advance\oldpitch-7 \yshift=\pitch\seminhh
  762.   \ifnum\oldpitch=\pitch$\raise\yshift\hbox to \z@{\hss\music#1}$\else
  763.   $\raise\yshift\hbox{\music#1}$\fi}\global\oldpitch=\pitch}
  764. %Setzen der Versetzungszeichen in der Vorzeichnung:
  765. \def\setsign#1#2{\hc@i=#1  \advance\hc@i by \clefcount
  766.   \ifnum\hc@i<-1 \advance\hc@i7 \else\ifnum\hc@i>9 \advance\hc@i-7 \fi\fi
  767.   $\raise\hc@i\seminhh\hbox{\music#2}$}
  768. %Atemzeichen
  769. \def\caesura{\setbox\hunkbox=\hbox{\unhbox\hunkbox%
  770.   \kern\p@\caesurasign\kern\nhh}}
  771. %       **************************************************              %
  772. %       *    Versetzungszeichen - Eingabemacros          *              %
  773. %       **************************************************              %
  774. %\x=\sharp Kreuz
  775. %\xx= Doppel-Kreuz
  776. %\n=\natural Aufloesungszeichen
  777. %\b=\flat
  778. %\bb=Doppel-Be
  779. \def\x#1{\global\pitch=#1\relax\setvorz{\msharp}}
  780. \def\xx#1{\global\pitch=#1\relax\setvorz{\mdoublesharp}}
  781. \def\n#1{\global\pitch=#1\relax\setvorz{\mnatural}}
  782. \def\b#1{\global\pitch=#1\relax\setvorz{\mflat}}
  783. \def\bb#1{\global\pitch=#1\relax\setvorz{\mdoubleflat}}
  784. %Versetzungszeichen in der Vorzeichnung
  785. \def\b@#1{\setsign{#1}{\mflat}}
  786. \def\x@#1{\setsign{#1}{\msharp}}
  787. \def\n@#1{\setsign{#1}{\mnatural}}
  788. %       **************************************************              %
  789. %       *    NOTEN - Eingabemacros                       *              %
  790. %       **************************************************              %
  791. %ganze
  792. \def\g#1{\global\pitch=#1\setnotes{NOTE}}
  793. %halbe
  794. \def\h#1{\global\pitch=#1\setnotes{Note}}
  795. %viertel
  796. \def\v#1{\global\pitch=#1\setnotes{note}}
  797. %achtel
  798. \def\a#1{\global\pitch=#1\setnotes{notE}}
  799. %sechzehntel
  800. \def\s#1{\global\pitch=#1\setnotes{noTE}}
  801. %zweiunddreissigstel
  802. \def\z#1{\global\pitch=#1\setnotes{nOTE}}
  803. %vierundsechzigstel
  804. \def\d#1{\global\pitch=#1\setnotes{nOte}}
  805. %hundertachtundzwanzigstel
  806. \def\o#1{\global\pitch=#1\setnotes{nOtE}}
  807. %       **************************************************              %
  808. %       *    PAUSEN  - Eingabemacros                     *              %
  809. %       **************************************************              %
  810. %Pausen erhalten \pitch = 5 zum Setzen der Wertpunkte im 3. Zwischenraum
  811. \def\sethunks{\sethunkglue\box\hunkbox\u@text\l@text}
  812. %ganze
  813. \def\pg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  814.   \sethunks\PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  815.   \nobreak\global\sk=\NOTEskip}
  816. %zwei Pausentakte
  817. \def\dpd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  818.   \sethunks{\music
  819.   \doublerest}\global\pitch=5\global\nyshift=\pitch\seminhh
  820.   \nobreak\global\sk=\NOTEskip}
  821. %drei Pausentakte
  822. \def\dpg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  823.   \sethunks{\music\doublerest}\hskip\nhh
  824.   \PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  825.   \nobreak\global\sk=\NOTEskip}
  826. %vier Pausentakte
  827. \def\dpdd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  828.   \sethunks{\music\ddoublerest}%
  829.   \global\pitch=5\global\nyshift=\pitch\seminhh
  830.   \nobreak\global\sk=\NOTEskip}
  831. %halbe
  832. \def\ph{\sethunks\Pause\global\pitch=5\global\nyshift=\pitch\seminhh
  833.   \nobreak\global\sk\Noteskip}
  834. %viertel
  835. \def\pv{\sethunks\pause\global\pitch=5\global\nyshift=\pitch\seminhh
  836.   \nobreak\global\sk\noteskip}
  837. %achtel
  838. \def\pa{\sethunks\pausE\global\pitch=5\global\nyshift=\pitch\seminhh
  839.   \nobreak\global\sk\notEskip}
  840. %sechzehntel
  841. \def\ps{\sethunks\pauSE\global\pitch=5\global\nyshift=\pitch\seminhh
  842.   \nobreak\global\sk\noTEskip}
  843. %zweiunddreissigstel
  844. \def\pz{\sethunks\paUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  845.   \nobreak\global\sk\nOTEskip}
  846. %vierundsechzigstel
  847. \def\pd{\sethunks\pAuse\global\pitch=5\global\nyshift=\pitch\seminhh
  848.   \nobreak\global\sk\nOteskip}
  849. %hundertachtundzwanzigstel
  850. \def\po{\sethunks\pAusE\global\pitch=5\global\nyshift=\pitch\seminhh
  851.   \nobreak\global\sk\nOtEskip}
  852. %       **************************************************              %
  853. %       *    Wertpunkte                                  *              %
  854. %       **************************************************              %
  855. %\dotwd wird in einer Notengruppe benoetigt zur Berechnung der Laenge
  856. %des Balkens oder Bogens
  857. \setbox0=\hbox to\seminhw{\rm\kern\p@.\hss}\dotwd=\wd0
  858. %#1 gibt Anzahl der Punkte an.
  859. %- Eingabemacro
  860. \def\.#1{\relax\hc@i=#1\relax
  861.   \ifchord\chordjoindots\else\relax\joindots%
  862.                          \ifgroup\global\advance\H@a@cor by #1\dotwd \fi
  863.   \fi}
  864. \def\dotodd{\hbox to \seminhw{\rm\kern\p@.\hss}}%
  865. %Verschieben der Wertpunkte von Noten auf einer Notenlinie in
  866. %......den Zwischenraum oberhalb
  867. \def\dot@up{\hbox{$\raise0.3\nhh
  868.  \hbox to \seminhw{\rm\kern\p@.\hss}$}}
  869. %......den Zwischenraum unterhalb der Notenlinie
  870. \def\dot@down{\hbox{$\raise-0.5\nhh
  871.  \hbox to \seminhw{\rm\kern\p@.\hss}$}}
  872. %Normalfall: Verschiebung in den oberen Zwischenraum
  873. \def\doteven{\dot@up}
  874. %setzt #1 Punkte bei einzelnen Noten
  875. \def\joindots{\ifodd\pitch\let\punkt\dotodd\else\let\punkt\doteven\fi
  876.   $\raise\nyshift\hbox{%\kern\smkern
  877.   \begingroup \loop \ifnum \hc@i>0 \aftergroup \punkt
  878.   \advance\hc@i-1 \repeat \endgroup}$}
  879. %Wertpukte   bei Akkorden
  880. \def\chordjoindots{\global
  881.   \setbox\dotbox\hboxnhw{\box\dotbox}{\joindots\unskip}}
  882. %       **************************************************              %
  883. %       *    Akkorde - Eingabemacros                     *              %
  884. %       **************************************************              %
  885. \def\lchord#1\endchord{%Initialisierung
  886.   \global\maxpitch=-10000\global\minpitch=10000
  887.   \sethunkglue\begingroup\chordtrue\lefttrue\stemuptrue
  888.   \global\setbox\rightbox=\null\global\setbox\leftbox=\null%
  889.   \global\setbox\dotbox\null%
  890.   #1\endchord}
  891. %
  892. \def\rchord#1\endchord{%Initialisierung
  893.   \global\maxpitch=-10000\global\minpitch=10000
  894.   \sethunkglue\begingroup\chordtrue\leftfalse\stemupfalse
  895.   \global\setbox\rightbox=\null%
  896.   \global\setbox\leftbox=\null\global\setbox\dotbox\null%
  897.   #1\endchord}
  898. %       **************************************************              %
  899. %       *    Konstruktion der Noten und Pausen           *              %
  900. %       **************************************************              %
  901. %Bestimmung der zu setzenden Noten und Bestimmung der Halsrichtung
  902. \def\tunedef{\ifchord \relax
  903.                     \gdef\tune{\csname\the\notename\endcsname}%
  904.   \else\ifbeam \relax \else\stemdirectiondef\fi
  905.   \gdef\tune{\csname\the\notename\the\direction\endcsname}%
  906.   \ifgroup \global\d@rection\expandafter{\the\direction}\fi\fi}
  907. \def\stemdirectiondef{%
  908.   \ifnum\pitch<4 \stemuptrue  \direction={up}%
  909.            \else \stemupfalse \direction={down}\fi}
  910. %
  911. \def\calstemlup#1{\global\dur@tion=#1\relax\stemupeval of \pitch}
  912. \def\calstemldown#1{\global\dur@tion=#1\relax\stemdowneval of \pitch}
  913. %
  914. %ganze  noten \NOTEup=\NOTEdown
  915. %
  916. \def\NOTEup{\ifbeam\relax\else\global\stemlength=\z@\fi
  917.   \global\dur@tion = 0 \hbox{\music\whole}}
  918. \let\NOTEdown=\NOTEup
  919. \def\NOTE{\hbox{\music\whole}\global\dur@tion = 0}
  920. %
  921. %Halbenoten, Hals aufwaerts , Hals abw"arts gestielt
  922. %
  923. \def\Note{\hbox{\music\half}\global\dur@tion = 1}
  924. \def\Noteup{\ifbeam\relax\else\calstemlup1\fi
  925.                    \hbox{\music\half \stemup}}
  926. \def\Notedown{\ifbeam\relax\else\calstemldown1\fi
  927.                      \hbox{\music\stemdown \half}}
  928. %
  929. %Viertelnoten, Hals aufwaerts , Hals abwaerts gestielt
  930. %
  931. \def\noteup{\ifbeam\relax\else\calstemlup2\fi
  932.                           \hbox{\music\quart\stemup}}
  933. \def\notedown{\ifbeam\relax\else\calstemldown2\fi
  934.                           \hbox{\music\stemdown\quart}}
  935. \def\note{\hbox{\music\quart}\global\dur@tion= 2}
  936. %
  937. %Achtelnoten, Hals aufwaerts , Hals abwaerts gestielt
  938. %
  939. \def\notE{\hbox{\music\quart}\global\dur@tion= 3}
  940. \def\notEup{\ifbeam\relax\else\calstemlup3\fi
  941.                           \hbox{\music\quart\flagup{\eighthup}}}
  942. \def\notEdown{\ifbeam\relax\else\calstemldown3\fi
  943.                           \hbox{\music\flagdown{\eighthdown}\quart}}
  944. %
  945. %Sechzehntelnoten, Hals aufwaerts , Hals abwaerts gestielt
  946. %
  947. \def\noTE{\hbox{\music\quart}\global\dur@tion= 4}
  948. \def\noTEup{\ifbeam\relax\else\calstemlup4\fi
  949.                    \hbox{\music\quart\flagup{\sixteenthup}}}
  950. \def\noTEdown{\ifbeam\relax\else\calstemldown4\fi
  951.                      \hbox{\music\flagdown{\sixteenthdown}\quart}}
  952. %
  953. %Zweiunddreissigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  954. %
  955. \def\nOTE{\hbox{\music\quart}\global\dur@tion= 5}
  956. \def\nOTEup{\ifbeam\relax\else\calstemlup5\fi
  957.                    \hbox{\music\quart\flagup{\thirtytwoup}}}
  958. \def\nOTEdown{\ifbeam\relax\else\calstemldown5\fi
  959.                      \hbox{\music\flagdown{\thirtytwodown}\quart}}
  960. %
  961. %Vierundsechzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  962. %
  963. \def\nOte{\hbox{\music\quart}\global\dur@tion= 6}
  964. \def\nOteup{\ifbeam\relax\else\calstemlup6\fi
  965.                    \hbox{\music\quart\flagup{\sixtyfourup}}}
  966. \def\nOtedown{\ifbeam\relax\else\calstemldown6\fi
  967.                      \hbox{\music\flagdown{\sixtyfourdown}\quart}}
  968. %
  969. %Hundertachtundzwanzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  970. %
  971. \def\nOtE{\hbox{\music\quart}\global\dur@tion= 7}
  972. \def\nOtEup{\ifbeam\relax\else\calstemlup7\fi
  973.                    \hbox{\music\quart\flagup{\hundredtwentyeightup}}}
  974. \def\nOtEdown{\ifbeam\relax\else\calstemldown7\fi
  975.                    \hbox{\music\flagdown{\hundredtwentyeightdown}\quart}}
  976. %       P A U S E N
  977. \def\PAUSE{{\music\wholerest}}
  978. \def\Pause{{\music\halfrest}}
  979. \def\pause{{\music\quartrest}}
  980. \def\pausE{{\music\eighthrest}}
  981. \def\pauSE{{\music\sixteenthrest}}
  982. \def\pauSE{{\music\sixteenthrest}} % bis auf weiteres, da diese im
  983. \def\paUSE{{\music\sixteenthrest}} %Zeichensatz noch nicht
  984. \def\pAuse{{\music\sixteenthrest}} %vorhanden sind.
  985. \def\pAusE{{\music\sixteenthrest}} %
  986. %       **************************************************              %
  987. %       *    Berechnung der Notenhalslaengen             *              %
  988. %       **************************************************              %
  989. \def\min@stemlength{\ifnum\dur@tion>2
  990.     \hc@i= 3 \advance\hc@i by \dur@tion \hd@i= \hc@i\seminhh
  991.    \ifdim\hd@i>\stemlength \global\stemlength=\hd@i\fi \fi}
  992. %Hals nach oben
  993. \def\stemupeval of #1{\pit@=#1\relax
  994.   \ifnum\pit@<-3 \advance\pit@ by -4 \global\stemlength=-\pit@\seminhh
  995.       \else\eval@up\fi\ifgroup\relax\else\min@stemlength\fi}
  996. \def\eval@up{\ifnum \pit@<6 \global\stemlength=7\seminhh
  997.       \else
  998.       \ifnum\pit@<8 \advance\pit@ by-12 \global\stemlength=-\pit@\seminhh
  999.         \else \global\stemlength=\twonhh
  1000.         \fi\fi}
  1001. %
  1002. \def\stemdowneval of #1{\pit@=#1\relax
  1003.   \ifnum\pit@>11 \advance\pit@ by -4 \global\stemlength=\pit@\seminhh
  1004.   \else \eval@down\fi\ifgroup\relax\else\min@stemlength\fi}
  1005. \def\eval@down{\ifnum \pit@ > 2 \global\stemlength=7\seminhh
  1006.   \else\ifnum\pit@ > 0 \advance\pit@ 4 \global\stemlength=\pit@\seminhh
  1007.   \else \global\stemlength=\twonhh
  1008.   \fi\fi}
  1009. %       **************************************************              %
  1010. %       *    Konstruktion der Notenhaelse                *              %
  1011. %       **************************************************              %
  1012. %Hals nach oben
  1013. \def\stemup{\vrule height \stemlength depth\z@ width\stemwidth}
  1014. %Hals nach unten
  1015. \def\stemdown{\vrule height\z@ depth\stemlength width\stemwidth
  1016.   \hskip-2\stemwidth}
  1017. %Hals nach unten mit Fahne
  1018. \def\flagdown#1{\stemdown\ifbeam\relax\else
  1019.  \vtop to\stemlength{\offinterlineskip\null\vss\hbox{\music#1}\null}\fi}
  1020. %Hals nach oben mit Fahne
  1021. \def\flagup#1{\stemup\ifbeam\relax\else
  1022.       \vbox to\stemlength{\offinterlineskip\hbox{\music#1}\vss\null}\fi}
  1023. %
  1024. %Bestimmung des Notenhalses im Akkord
  1025. %
  1026. \def\stemdef{%
  1027.   \ifstemup\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax
  1028.     \or\stemup \or\stemup \or\flagup{\eighthup}%
  1029.     \or\flagup{\sixteenthup}\or\flagup{\thirtytwoup}%
  1030.     \or\flagup{\sixtyfourup}\or\flagup{\hundredtwentyeightup}%
  1031.     \else\noexpand\relax\fi}}%
  1032.   \else\edef\stem{\hbox{\ifcase\dur@tion  \noexpand\relax
  1033.     \or\stemdown \or\stemdown  \or\flagdown{\eighthdown}%
  1034.     \or\flagdown{\thirtytwodown}\or\flagdown{\sixteenthdown}%
  1035.     \or\flagdown{\sixtyfourdown}\or\flagdown{\hundredtwentyeightdown}%
  1036.     \else\noexpand\relax \fi}}%
  1037.   \fi}
  1038. % Setzen des Notenhalses im Akkord
  1039. \def\setstem{\relax
  1040.   \ifstemup $\raise\minpitch\seminhh\stem $%
  1041.   \else     $\raise\maxpitch\seminhh\stem $\fi}
  1042. %       **************************************************              %
  1043. %       *    Das Setzen  der Noten                       *              %
  1044. %       **************************************************              %
  1045. \def\setnotes#1{\relax\notename={#1}\global\nyshift=\pitch\seminhh
  1046.   \legerlines\tunedef
  1047.   \ifchord\setchord\else  \sethunkglue \setnote \fi
  1048.   }
  1049. %einzelne Note
  1050. \def\setnote{\global\setbox\notebox=
  1051.   \hboxnhw{$\raise\lyshift\box\legerbox$}{$\raise\nyshift\hbox{\tune}$}%
  1052.   \setakzent
  1053.   \box\hunkbox\kern\smkern\u@text\l@text\box\notebox
  1054.   \global\spaceskip=\csname\the\notename skip\endcsname\nobreak
  1055. %  \ifnum\dur@tion=0 \global\H@a@cor =\seminhw\fi
  1056.    \ifgroup \global \H@a@cor = \z@ \fi
  1057. }
  1058. %Akkorde
  1059. %Zusammenfassung der einzelnen Noten in \leftbox bzw. \rightbox
  1060. \def\setchord{%
  1061.   \ifnum\maxpitch<\pitch \global\maxpitch = \pitch\fi
  1062.   \ifnum\minpitch>\pitch \global\minpitch = \pitch\fi
  1063.   \chordlegerlines
  1064.   \ifleft
  1065.   \global\setbox\leftbox=
  1066.   \hboxnhw{\box\leftbox}{$\raise\nyshift\hbox{\tune}$}%
  1067.   \else
  1068.   \global\setbox\rightbox=
  1069.   \hboxnhw{\box\rightbox}{$\raise\nyshift\hbox{\tune}$}\fi
  1070.   }
  1071. %
  1072. \def\endchord{%
  1073.   \nobreak\global\sk=\csname\the\notename skip\endcsname
  1074.   \ifbeam \relax \else\chordnobeam\fi
  1075.   \hc@i=\maxpitch \advance\hc@i-\minpitch
  1076.   \global\advance\stemlength by \hc@i\seminhh
  1077.   \stemdef
  1078.   \ifgroup \global\H@a@cor=\z@
  1079.           \ifstemup
  1080.            \ifdim\wd\rightbox>\z@ \global\advance\H@a@cor by \nhw \fi
  1081.            \fi
  1082.            \global\advance\H@a@cor by \wd\dotbox
  1083.            \global\d@rection\expandafter{\the\direction}%
  1084.   \fi
  1085.   \global\setbox\notebox=
  1086.   \hbox{\box\leftbox\setstem\box\rightbox\box\dotbox}%
  1087.   \setchordakzent
  1088.   \box\hunkbox\kern\smkern\u@text\l@text\box\notebox\chordfalse\endgroup}
  1089. \def\chordnobeam{\relax\ifstemup \stemupeval of \maxpitch
  1090.                       \else    \stemdowneval of \minpitch\fi
  1091.                \ifgroup\ifstemup\chordlowerstartpoints
  1092.                        \else\chordupperstartpoints\fi
  1093.                \fi}
  1094. %       ***********************************************************     %
  1095. %       * Tonarten und Aufloesung, Notenschluessel und Taktangabe *     %
  1096. %       ***********************************************************     %
  1097. %\discretionary{vor}{nach}{kein}
  1098. \def\change{\edef\-{\noexpand\discretionary{}%vor
  1099.                    {\noexpand\hbox{\noexpand\lines}%
  1100.                     \noexpand\hbox{\the\cleftoks\the\signtoks}%
  1101.                     \noexpand\kern\noexpand\seminhw}%nach
  1102.                    {}}}%kein
  1103. \def\signchange{\change\gluebrule\discretionary{%
  1104.   \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks\set@rulesk
  1105.   }}{\hbox{\lines\the\cleftoks\the\signtoks}\kern\seminhw}{%
  1106.   \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks}}%
  1107.   \set@rulesk}
  1108. \def\clefchange{\change\setbox\hunkbox=\hbox{\unhbox\hunkbox%
  1109.   \kern\p@{{\let\music=\smallmusic\the\cleftoks}}}}
  1110. %Taktangabe
  1111. \def\meter#1/#2{\nobreak\gluebmeter\discretionary{%
  1112.   \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}\kern\seminhw
  1113.   }{\hbox{\lines\the\cleftoks\the\signtoks\set@rulesk
  1114.   \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}}\kern0.25\seminhw}%
  1115.   {\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}%
  1116.   \kern0.5\seminhw}}\set@rulesk}
  1117. % \kern\seminhw}}\set@rulesk}
  1118. \def\place#1#2{\setbox\placebox\hbox{\rm#2}$\raise#1.5\seminhh\hbox{\copy
  1119.   \placebox}$}
  1120. %Vorzeichnung
  1121. \def\signature#1#2{\global\signtoks={#1\kern\nhw}%
  1122.   \iffirst\change\box\hunkbox\the\signtoks\set@rulesk
  1123.   \else\signchange\fi\global\canceltoks={#2}}
  1124. %Notenschluessel
  1125. \def\clef#1#2{\global\clefcount=#1
  1126.   \global\cleftoks={\setkey{#2}\kern\seminhw}%
  1127.   \clefchange}
  1128. %Abkuerzungen fuer Vorzeichnungen - gro\3e Buchstaben =Dur-Tonarten
  1129. %                                   kleine Buchstaben =Moll-Tonarten
  1130. \def\F{\signature{\b@4}{\n@4}}
  1131. \def\B{\signature{\b@4\b@7}{\n@4\n@7}}
  1132. \def\Es{\signature{\b@4\b@7\b@3}{\n@4\n@7\n@3}}
  1133. \def\As{\signature{\b@4\b@7\b@3\b@6}{\n@4\n@7\n@3\n@6}}
  1134. \def\Des{\signature{\b@4\b@7\b@3\b@6\b@2}{\n@4\n@7\n@3\n@6\n@2}}
  1135. \def\Ges{\signature{\b@4\b@7\b@3\b@6\b@2\b@5}{\n@4\n@7\n@3\n@5\n@2\n@5}}
  1136. \def\Ces{\signature{\b@4\b@7\b@3\b@6\b@2\b@5\b@1}%
  1137.   {\n@4\n@7\n@3\n@5\n@2\n@5\n@1}}
  1138. \def\C{\signature{}{}}
  1139. \def\G{\signature{\x@8}{\n@8}}
  1140. \def\D{\signature{\x@8\x@5}{\n@8\x@5}}
  1141. \def\A{\signature{\x@8\x@5\x@9}{\n@8\n@5\n@9}}
  1142. \def\E{\signature{\x@8\x@5\x@9\x@6}{\n@8\n@5\n@9\n@6}}
  1143. \def\H{\signature{\x@8\x@5\x@9\x@6\x@3}{\n@8\n@5\n@9\n@6\n@3}}
  1144. \def\Fis{\signature{\x@8\x@5\x@9\x@6\x@3\x@4}{\n@8\n@5\n@9\n@6\n@3\n@4}}
  1145. \let\mdis=\F                 \let\ma=\C
  1146. \let\mgis=\H                 \let\md=\F
  1147. \let\mcis=\E                 \let\mg=\B
  1148. \let\mfis=\A                 \let\mc=\Es
  1149. \let\mh=\D                   \let\mf=\As
  1150. \let\me=\G                   \let\mb=\Des
  1151.                              \let\mes=\Ges
  1152. %Notenschluessel
  1153. \def\setkey#1{\hbox{\music#1}}
  1154. \def\vio{\clef{0}{\mviolin}}
  1155. \def\viooct{\clef{0}{\mviolinoct}}% noch nicht im Font
  1156. \def\vioOct{\clef{0}{\mviolinOct}} % noch nicht im Font
  1157. \def\bass{\clef{-2}{\mbass}}
  1158. \def\bassoct{\clef{-2}{\mbassoct}}   %noch nicht im Font
  1159. \def\bassOct{\clef{-2}{\mbassOct}}   %noch nicht im Font
  1160. \def\bariton{\clef{3}{\mbariton}}
  1161. \def\tenor{\clef{1}{\mtenor}}
  1162. \def\alto{\clef{-1}{\malt}}
  1163. \def\mezzosopran{\clef{-3}{\mmezzosopran}}
  1164. \def\sopran{\clef{-5}{\msopran}}
  1165. %       **************************************************              %
  1166. %       *    Die Verarbeitung der Nachbarschaften        *              %
  1167. %       **************************************************              %
  1168. \mathsurround=\z@
  1169. %       **************************************************              %
  1170. %       * Initialisierung der Listen einer Notengruppe   *              %
  1171. %       **************************************************              %
  1172. %Gruppe belegt die notwendigen Listen fuer die Notengruppe
  1173. \def\group#1#2{\grouptrue
  1174.   \global\oldskip=\sk
  1175.   \let\u@@text = \u@text
  1176.   \let\l@@text = \l@text
  1177.   \global\setbox\neighborhood=\null
  1178.   \gdef\elementlist{#1}\gdef\pitchlist{#2}%
  1179.   \gdef\H@list{}\gdef\stemlist{}%
  1180.   \gdef\uslurlist{}\gdef\lslurlist{}%
  1181.   \gdef\H@corlist{}%
  1182.   \gdef\dir@list{}%
  1183.   \global\sl@c=\z@
  1184.   \global\S=0
  1185.   \N=0
  1186.   \long\def\\##1{%
  1187.   \global\E@l=\z@\global\E@u=\z@%zuruecksetzen auf 0pt
  1188.   \global\setbox\neighborhood=\hbox{\unhbox\neighborhood##1}%
  1189.   \rightappend0pt\to\stemlist       %initialisiert \stemlist
  1190.   \expandafter\rightappend\the\wd\neighborhood\to\H@list%belegt \H@list
  1191.   \expandafter\rightappend\the\E@u\to\uslurlist
  1192.                                     %belegt obere startpunkte fuer slurs
  1193.   \expandafter\rightappend\the\E@l\to\lslurlist
  1194.                                     %belegt untere startpunkte fuer slurs
  1195.   \expandafter\rightappend\the\H@a@cor\to\H@corlist
  1196.                                     %initialisiert \H@corlist
  1197.   \global\H@a@cor=\z@%zuruecksetzen auf 0pt
  1198.   \expandafter\rightappend\the\d@rection\to\dir@list
  1199.                                     %initialisiert \dir@list
  1200.   \advance\N1 }\elementlist\groupfalse
  1201.   }
  1202. %       **************************************************              %
  1203. %       * Abarbeitung & Setzen einer Notengruppe         *              %
  1204. %       **************************************************              %
  1205. \def\go{%
  1206.   \let\u@text=\u@@text
  1207.   \let\l@text=\l@@text
  1208.   \m@ii=0 \long\def\\##1{\advance\m@ii 1
  1209.   {\assign\m@ii\of\stemlist\to\stemlength}%
  1210.   \ifdim\stemlength=\z@\beamfalse\else\beamtrue\fi##1}%
  1211.  \global\sk=\oldskip
  1212.  \sethunkglue\hbox{\global\sk=\z@skip\elementlist}\nobreak
  1213.  \beamfalse}
  1214. %       **************************************************              %
  1215. %       * Verbalkung - Eingabemacros                     *              %
  1216. %       **************************************************              %
  1217. % Eingabemacros - Balken oberhalb - Balken unterhalb der Notengruppe
  1218. \def\ubeam#1#2{\stemuptrue  \n@a=#1 \n@e=#2 \direction{up}%
  1219.   \putdir{up}\from\n@a\to\n@e\b@@m}
  1220. %
  1221. \def\lbeam#1#2{\stemupfalse \n@a=#1 \n@e=#2 \direction{down}%
  1222.   \putdir{down}\from\n@a\to\n@e\b@@m}
  1223. %
  1224. \def\b@@m{%
  1225.   %Initialisierung
  1226.   \additem{\noexpand\direction{\the\direction}}{}\in\elementlist\at\n@a
  1227.   \ifnum\n@e>\N \n@e=\N\fi
  1228.   \global\minsl=2\nhh
  1229.   \assign\n@a\of\pitchlist\to\P@a
  1230.   \assign\n@e\of\pitchlist\to\P@e
  1231.   \assign\n@e\of\H@list\to\H@e
  1232.   \assign\n@a\of\H@list\to\H@a
  1233.   \select\n@a\of\dir@list\to\dir@i
  1234.   \lokalassign\n@a\of\H@corlist\to\hd@i  % vorne verkuerzt
  1235.   \ifx\dir@i\down@\advance\hd@i \nhw \fi
  1236.   \global\advance\H@a by-\hd@i
  1237.   \lokalassign\n@e\of\H@corlist\to\hd@i  % und hinten verkuerzt
  1238.   \select\n@e\of\dir@list\to\dir@i
  1239.   \ifx\dir@i\down@\advance\hd@i \nhw \fi
  1240.   \global\advance\H@e by-\hd@i
  1241.   \global\advance\H@e by-\H@a
  1242.   %Berechnung der Steigung
  1243.   \csname gradient\the\direction\endcsname%
  1244.   %Anpassung der Notenhaelse
  1245.   \csname calstems\the\direction\endcsname%
  1246.   %Positionierung des Balkens
  1247.   \beaming
  1248.   %Addieren der berechneten Halsl"angenkorrektur in der \stemlist
  1249.   \addslc\in\stemlist\from\n@a\to\n@e
  1250.   \global\advance\sl@c \seminhh
  1251.   %Korrektur der Bogenangfangspunkte oberhalb bzw. unterhalb der Noten
  1252.   \ifstemup\relax
  1253.         \addslc\in\uslurlist\from\n@a\to\n@e
  1254.       \else \relax\global\sl@c=-\sl@c
  1255.         \addslc\in\lslurlist\from\n@a\to\n@e
  1256.         \global\sl@c=-\sl@c
  1257.       \fi
  1258.   \global\sl@c=\z@
  1259.   }
  1260. %       **************************************************              %
  1261. %       * Berechnungen der Halslaengen und Steigung      *              %
  1262. %       **************************************************              %
  1263. \def\gradientup{\gradient{<}{+}}
  1264. \def\gradientdown{\gradient{>}{-}}
  1265. \def\gradient#1#2{%
  1266.   \R@a=\P@a\seminhh
  1267.   \R@e=\P@e\seminhh
  1268. %jetzt erst die Stemhoehe berechnen.
  1269.   \ifstemup \stemupeval of \P@a \s@a=\stemlength
  1270.             \stemupeval of \P@e \s@e=\stemlength
  1271.   \else     \stemdowneval of \P@a \s@a=\stemlength
  1272.             \stemdowneval of \P@e \s@e=\stemlength
  1273.   \fi
  1274.   \global\E@a=\R@a \global\advance \E@a by#2\s@a
  1275.   \global\E@e=\R@e \global\advance \E@e by#2\s@e
  1276.   \ifnum\P@a=\P@e \global\S=0
  1277.   \else\global\flagc=1
  1278.     \ifnum\P@a#1\P@e \gradz@\in\pitchlist\with#1\the\P@e\from\n@a\to\n@e
  1279.     \else          \gradz@\in\pitchlist\with#1\the\P@a\from\n@a\to\n@e\fi
  1280.     \ifnum\flagc=0 \global\S=0\else \global\S=1\fi
  1281.   \fi
  1282.   \relax
  1283.   \ifnum\S = 0 \relax
  1284.     \ifdim\E@a#1\E@e \global\E@a=\E@e \s@a=#2\E@a \advance\s@a-#2\R@a \fi
  1285.   \else
  1286.     \distance\E@a\E@e
  1287.     \ifdim\Abs=\z@\relax
  1288.        \ifnum\P@e#1\P@a \corrc\s@a
  1289.        \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
  1290.        \else         \corrc\s@e
  1291.        \global\E@e=\R@e\global\advance\E@e by#2\s@e\relax\fi
  1292.     \fi
  1293.     \distance\E@a\E@e
  1294.     \limit=0.45 \H@e
  1295.     \ifdim\limit>4\nhh \limit=4\nhh \fi
  1296.     \hd@i=\Abs\advance\hd@i by -\limit  \corr=\hd@i
  1297.     \ifdim\corr>\z@\relax
  1298.       \ifnum\P@a#1\P@e \corrb\s@a
  1299.       \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
  1300.       \else\corrb\s@e\global\E@e=\R@e\global\advance\E@e by#2\s@e\fi
  1301.       \Abs=\corr
  1302.     \fi
  1303.     \ifnum\P@a>\P@e\global\S=-\Abs\else\global\S=\Abs\fi
  1304.     \global\multiply\S by 100 \global\divide\S by \H@e
  1305.   \fi                  %von P@a=Pb Abfrage
  1306. %\s@a und \s@e zurueckpacken an \n@a-te bzw. \N-te Stelle  der \stemlist
  1307.     \expandafter\exchange\the\s@a\in\stemlist\at\n@a
  1308.     \expandafter\exchange\the\s@e\in\stemlist\at\n@e
  1309.   \whatisnewstartpoint
  1310.   \assignS}
  1311. %
  1312. \def\calstemsup{\calstems{+}}
  1313. \def\calstemsdown{\calstems{-}}
  1314. \def\calstems#1{%
  1315.   \n@i=\n@a
  1316.   \global\sl@c=\z@
  1317.   \EP@=\E@a
  1318.   \loop\advance\n@i by 1
  1319.     \assign\n@i\of\pitchlist\to\P@i
  1320.     \R@i=\P@i\seminhh
  1321.     \getendpoint\n@i\EP@i
  1322.     \s@i=\EP@i
  1323.     \advance\s@i by-\R@i        %Laenge des stems
  1324.     \s@i=#1\s@i
  1325.     \expandafter\exchange\the\s@i\in\stemlist\at\n@i
  1326.     \whatarenewstartpoints
  1327.     \ifdim\s@i<\minsl\relax
  1328.       \ifdim\s@i<\z@ \s@i=-\s@i\advance\s@i by \minsl
  1329.       \else\s@i=\R@i\advance\s@i by #1\minsl\advance\s@i by-\EP@i\s@i=#1\s@i\fi
  1330.       \ifdim\s@i>\sl@c\relax\global\sl@c=\s@i\fi
  1331.     \fi
  1332.   \ifnum\n@i<\n@e \repeat
  1333.   }
  1334. %
  1335. %Auswertung der \beamlist
  1336. \def\evalbeamlist#1-#2,#3#{\def\aa{#1}\def\bb{#2}%
  1337.   \ifx\aa\empty\m@a=0\else\m@a=#1\fi
  1338.   \ifx\bb\empty\m@e=\m@a\else\m@e=#2\fi\def\nxt{#3}%
  1339.   \ifnum\m@a<0\m@a=0\fi     %belegung von m@a und m@e, so dass in
  1340.   \ifnum\m@a>\N\m@a=\N\fi   %createbeam keine schwierigkeiten auftauchen
  1341.   \ifnum\m@e<1\m@e=1\fi     %koennen, z.B. bei \assign usw.
  1342.   \ifnum\m@e>\N\m@e=\N\fi   %0<=\m@a<=\N;  1<=\m@e<=\N
  1343.   \ifnum\m@e<\m@a\hc@i=\m@a\m@a=\m@e\m@e=\hc@i\fi
  1344. }
  1345. %
  1346. \def\beamposition{%
  1347.     \assign\m@a\of\H@list\to\H@m@a
  1348.     \assign\m@a\of\H@corlist\to\H@a@cor
  1349.     \select\m@a\of\dir@list\to\dir@i
  1350.     \relax\ifx\dir@i\down@ \global\advance\H@a@cor \nhw \fi
  1351.     \global\advance\H@m@a by -\H@a@cor
  1352.     \V@a=\H@m@a
  1353.     \advance\V@a-\H@a
  1354.     \multiply\V@a by\S  \V@a=0.01\V@a
  1355.     \ifstemup  \advance \V@a by \sl@c \relax
  1356.     \else      \advance \V@a by-\sl@c
  1357.     \fi
  1358.     \advance\V@a by \EP@
  1359.     \ifstemup\ifnum\S<0 \relax
  1360.                          \else \advance \V@a-\beamthickness \fi
  1361.     \else
  1362.          \ifnum\S<0 \advance\V@a \beamthickness\fi
  1363.     \fi
  1364.     \ifstemup
  1365.         \advance\V@a by-\beamrow\nhh%zur Platzierung der Balken
  1366.      \else
  1367.         \advance\V@a by \beamrow\nhh%zur Platzierung der Balken
  1368.     \fi
  1369.     }
  1370. \def\createbeam{%
  1371.   \looop\expandafter\evalbeamlist\nxt{}%
  1372.   \ifnum\m@a>0\beamposition
  1373.     \ifnum\m@e=\m@a\relax
  1374. %%      \immediate\write0{rrule \the\S}%
  1375.         \additem{}{\noexpand\beamr{\the\S}%
  1376.         {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1377.     \else \lokalassign\m@e\of\H@list\to\hd@i
  1378.           \lokalassign\m@e\of\H@corlist\to\hd@ii
  1379.           \select\m@e\of\dir@list\to\dir@i
  1380.           \relax\ifx\dir@i\down@ \advance\hd@ii\nhw \fi
  1381.           \advance\hd@i by-\hd@ii
  1382.           \advance\hd@i by-\H@m@a
  1383. %%        \immediate\write0{rule \the\hd@i}%
  1384.           \additem{}{\noexpand\beam{\the\S}%
  1385.           {\the\hd@i}{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1386.     \fi
  1387.   \else
  1388.     \m@a=\m@e\beamposition
  1389. %%  \immediate\write0{lrule \the\S}%
  1390.     \additem{}{\noexpand\beaml{\the\S}%
  1391.     {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1392.   \fi
  1393.   \ifx\nxt\empty\relax\leave%
  1394.   }
  1395. %
  1396. \def\beaming{\cardinality\beamlist\to\hc@i%
  1397.   \ifnum\hc@i>2 \advance\hc@i-2 \global\advance\sl@c by\hc@i\seminhh\fi
  1398.   \global\beamrow0
  1399.   \def\\##1{{\def\nxt{##1}\relax\createbeam\global\advance\beamrow 1%
  1400.   }}\beamlist}
  1401. %       **************************************************              %
  1402. %       *  Plazierung und Zusammensetzung der Balken     *              %
  1403. %       **************************************************              %
  1404. \def\beam#1#2#3#4{\global\S=#1\global\L@a=#2%
  1405.   $\raise#3\hbox to \z@{\kern-#4\drawbeam\hss}$}
  1406. \def\beamr#1#2#3{\global\S=#1%
  1407.   $\raise#2\hbox to\z@{\kern-#3\drawbe@m\hss}$}
  1408. \def\beaml#1#2#3{\global\S=#1$\raise#2\hbox to\z@{\hss
  1409.   \drawb@@m\ifstemup\else\kern\nhw\fi}$}
  1410. %
  1411. \def\putintovbox#1{%
  1412.      \ifstemup
  1413.        \ifnum\S>0 \vb@@{#1}\else \vt@@{#1}\fi
  1414.      \else
  1415.        \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
  1416.      \fi}
  1417. \def\putintovb@x#1{%
  1418.      \ifstemup
  1419.        \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
  1420.      \else
  1421.        \ifnum\S<0 \vb@@{#1}\else\vt@@{#1}\fi
  1422.      \fi}
  1423. %
  1424. \def\makebeam{\loop
  1425.       \ifodd\L@
  1426.          $\raise\SHIFT\hbox{\beamfont\char\the\CODE}$%
  1427.          \advance\SHIFT by \l@\gradfactor
  1428.       \fi
  1429.       \divide\L@ 2 \addC1 \multiply\l@2
  1430.       \ifnum\L@>0\repeat}
  1431. %
  1432. \def\drawbeam{%
  1433.   {\gradfactor=\S\p@ \gradfactor = 0.005 \gradfactor
  1434.   \ifnum\S=0
  1435.     \hbox{\vrule height \beamthickness depth\z@ width\L@a}%
  1436.   \else\l@=1\assignCODE
  1437.   \L@=\L@a
  1438.   \advance \L@ by 32677%um Rundungsfehler zu vermeiden
  1439.   \divide\L@ by 32678%Genauigkeit 0.5pt
  1440.   \SHIFT=\z@
  1441.   \putintovbox{\beamfont \ifnum \L@ >255 \setlongbeams\fi \makebeam}%
  1442.   \fi}}
  1443. \def\setlongbeams{\relax\hc@i=\CODE \advance\hc@i 7%
  1444.                    \loop$\raise\SHIFT\hbox{\char\the\hc@i}$%
  1445.                    \advance\SHIFT 128 \gradfactor \advance\L@-255
  1446.                    \ifnum \L@>255 \repeat}
  1447. %
  1448. \def\drawbe@m{%
  1449.   \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
  1450.   \else\assignCODE\addC3\putintovbox{\beamfont\char\the\CODE}\fi}
  1451. \def\drawb@@m{%
  1452.   \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
  1453.   \else\assignCODE\addC3\putintovb@x{\beamfont\char\the\CODE}\fi}
  1454. %       **************************************************              %
  1455. %       *    Die Bogen                                   *              %
  1456. %       **************************************************              %
  1457. %-Eingabemacros - Bogen oberhalb - Bogen unterhalb der Notengruppe
  1458. \def\uslur#1#2{\n@a=#1\n@e=#2%
  1459.   %Initialisierung
  1460.   \inislur
  1461.   \assign\n@a\of\uslurlist\to\E@a
  1462.   \assign\n@e\of\uslurlist\to\E@e
  1463.   \assignflags
  1464.   %Berechnung der entgueltigen Bogenbreite
  1465.   %Belegung des Anfangs- und Endpunktes des Bogens
  1466.   %Berechnung des horizontalen Versatzes des Bogens
  1467.   \ifdim\s@a=\z@ \ifdim\s@e=\z@ \u@nobeaming \else \u@rightbeaming \fi
  1468.       \else \ifdim\s@e=\z@ \u@leftbeaming \else\u@leftrightbeaming\fi
  1469.   \fi
  1470.   %Berechnung der Laenge des Bogens
  1471.   \intslurwidth
  1472.   %Berechnung der Sekantensteigung
  1473.   \gradientslur{<}{-}%
  1474.   %Positionierung des Bogens
  1475.   \ifnum\slurwidth > 17 \caluphrase
  1476.   \else
  1477.      \assignuslurchar
  1478.      \ifnum\V@int=0\setslurs{2}{0}\else
  1479.      \ifdim\V@<\z@\setslurs{0}{-1}\else\setslurs{0}{+1}\fi\fi
  1480.   \fi
  1481. }
  1482. \def\lslur#1#2{\n@a=#1\n@e=#2%
  1483.   %Initialisierung
  1484.   \inislur
  1485.   \assign\n@a\of\lslurlist\to\E@a
  1486.   \assign\n@e\of\lslurlist\to\E@e
  1487.   \assignflags
  1488.   %Berechnung der entgueltigen Bogenbreite
  1489.   %Belegung des Anfangs- und Endpunktes des Bogens
  1490.   %Berechnung des horizontalen Versatzes des Bogens
  1491.   \ifdim\s@a=\z@ \ifdim\s@e=\z@ \l@nobeaming \else \l@rightbeaming \fi
  1492.       \else \ifdim\s@e=\z@ \l@leftbeaming \else\l@leftrightbeaming\fi
  1493.   \fi
  1494.   %Berechnung der Laenge des Bogens
  1495.   \intslurwidth
  1496.   %Berechnung der Sekantensteigung
  1497.   \gradientslur{>}{+}%
  1498.   %Positionierung des Bogens
  1499.   \ifnum\slurwidth > 17 \callphrase
  1500.   \else
  1501.     \assignlslurchar
  1502.     \ifnum\V@int=0\setslurs{3}{0}\else
  1503.      \ifdim\V@<\z@\setslurs{1}{-1}\else\setslurs{1}{+1}\fi\fi
  1504.   \fi
  1505. }
  1506. %
  1507. \def\intslurwidth{%
  1508.   %\slurwidth*\nhw  <= \H@e < (\slurwidth+1)*\nhw
  1509.  \slurwidth=\H@e
  1510.  \advance\slurwidth \seminhw
  1511.  \divide\slurwidth by \nhw
  1512.  \ifnum\slurwidth< 1 \slurwidth= 1 \fi}
  1513. %Hilfsfunktionen
  1514. \def\newslurwidth#1#2{%
  1515.   \ifcase#1 \global\advance\H@e #2\nhw
  1516.   \or       \global\advance\H@e #2\seminhw \fi}
  1517. \def\calslurwidth{\global\advance\H@e-\H@e@cor
  1518.                    \global\advance\H@a-\H@a@cor
  1519.                    \global\advance\H@e-\H@a\relax}
  1520. \def\calslurcor#1{\slurcor=\H@a@cor \advance\slurcor #1\seminhw
  1521.  \slurcor = -\slurcor}
  1522. \def\newE@a#1{\ifnum\flaga=0 \global\E@a=\P@a\seminhh
  1523.   \global\advance\E@a#1\nhh \fi}
  1524. \def\newE@e#1{\ifnum\flagb=0 \global\E@e=\P@e\seminhh
  1525.   \global\advance\E@e#1\nhh \fi}
  1526. \def\inislur{\relax
  1527.   \ifnum\n@e>\N \n@e=\N\fi
  1528.   \ifnum\n@a<1  \n@a= 1\fi
  1529.   \ifnum\n@a>\n@e\n@e=\hc@i \n@e=\n@a \n@a=\hc@i\fi
  1530.   %
  1531.   \assign\n@e\of\H@list\to\H@e
  1532.   \lokalassign\n@e\of\H@corlist\to\H@e@cor
  1533.   \assign\n@a\of\H@list\to\H@a
  1534.   \assign\n@a\of\H@corlist\to\H@a@cor
  1535.   \select\n@a\of\dir@list\to\dir@a
  1536.   \select\n@e\of\dir@list\to\dir@e
  1537.   \ifx\dir@a\down@ \global\advance\H@a@cor \nhw \fi
  1538.   \ifx\dir@e\down@ \advance\H@e@cor \nhw \fi
  1539.   %
  1540.   \assign\n@e\of\pitchlist\to\P@e
  1541.   \assign\n@a\of\pitchlist\to\P@a
  1542.   \lokalassign\n@e\of\stemlist\to\s@e
  1543.   \lokalassign\n@a\of\stemlist\to\s@a
  1544. }
  1545. \def\assignflags{%
  1546.    \flaga=2 \ifdim \E@a=\z@ \flaga=0 \fi
  1547.   \ifdim\E@a> \I@@ \flaga=1 \global\advance \E@a-\I@@\fi
  1548.   \ifdim\E@a<-\I@@ \flaga=1 \global\advance \E@a-\I@@\fi
  1549.   \flagb=2\ifdim \E@e =\z@ \flagb=0\fi
  1550.   \ifdim\E@e> \I@@ \flagb=1 \global\advance \E@e-\I@@\fi
  1551.   \ifdim\E@e<-\I@@ \flagb=1 \global\advance \E@e \I@@\fi
  1552.   \relax}
  1553. %
  1554. %ohne Verbalkung
  1555. \def\u@nobeaming{\calslurwidth
  1556.   \ifx\dir@e\up@ \relax\newslurwidth{0}{-}\fi %stemup
  1557.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1558. %
  1559. \def\l@nobeaming{\calslurwidth
  1560.   \ifx\dir@a\down@ \newslurwidth{0}{-}\fi%stemdown
  1561.   \ifx\dir@a\up@\calslurcor{+}\else \calslurcor{-}\fi
  1562.   \newE@a{-}\newE@e{-}}
  1563. % Verbalkung nur in \n@e
  1564. \def\u@rightbeaming{\ifnum\flagb<2 \u@rightstemdown \else
  1565.   \u@rightstemup \fi}
  1566. \def\u@rightstemdown{\calslurwidth
  1567.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1568. \def\u@rightstemup{\calslurwidth
  1569.   \advance\n@e-1
  1570.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
  1571.   \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
  1572.   \fi\advance\n@e1}
  1573. %
  1574. \def\l@rightbeaming{\ifnum\flagb<2 \l@rightstemup \else
  1575.   \l@rightstemdown \fi}
  1576. \def\l@rightstemup{\calslurwidth
  1577.   \ifx\dir@a\down@ \newslurwidth{0}{-}\fi
  1578.   \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}}
  1579. \def\l@rightstemdown{\calslurwidth
  1580.   \advance\n@e-1
  1581.   \ifnum\n@e=\n@a \ifx\dir@a\up@\newslurwidth{0}{-}\fi
  1582.     \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}%
  1583.   \else\ifx\dir@a\up@\newslurwidth{1}{+}\else\newslurwidth{1}{-}\fi
  1584.     \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}%\E@e belegt
  1585.   \fi\advance\n@e 1 }
  1586. %
  1587. % Verbalkung nur in \n@a
  1588. \def\u@leftbeaming{\ifnum\flaga<2 \u@leftstemdown \else
  1589.   \u@leftstemup \fi}
  1590. \def\u@leftstemdown{\calslurwidth
  1591.   \ifx\dir@e\up@\newslurwidth{0}{-}\fi
  1592.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1593. \def\u@leftstemup{\calslurwidth
  1594.   \advance\n@e-1
  1595.   \ifnum\n@e=\n@a \ifx\dir@e\up@\newslurwidth{0}{-}\fi
  1596.   \calslurcor{-}\newE@a{+}\newE@e{+}%
  1597.   \else\ifx\dir@e\up@\newslurwidth{1}{-}\else\newslurwidth{1}{+}\fi
  1598.   \slurcor=-\H@a@cor \newE@e{+}%\E@a belegt
  1599.   \fi\advance\n@e1}
  1600. %
  1601. \def\l@leftbeaming{\ifnum\flaga<2 \l@leftstemup \else
  1602.   \l@leftstemdown \fi}
  1603. \def\l@leftstemup{\calslurwidth
  1604.   \calslurcor{+}\newE@a{-}\newE@e{-}}
  1605. \def\l@leftstemdown{\calslurwidth
  1606.   \advance\n@e-1
  1607.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{-}\newE@e{-}%
  1608.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
  1609.   \fi\advance\n@e 1 }
  1610. %
  1611. % Verbalkung in beiden Faellen
  1612. \def\u@leftrightbeaming{\ifnum\flagb<2 \u@stemdown \else \u@stemup \fi}
  1613. \def\u@stemdown{%
  1614.   \ifnum\flaga<2 \u@stemdownstemdown \else \u@stemupstemdown \fi}
  1615. \def\u@stemdownstemdown{\calslurwidth
  1616.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1617. \def\u@stemupstemdown{\calslurwidth
  1618.   \advance\n@e-1
  1619.   \ifnum\n@e=\n@a \calslurcor{-}\newE@a{+}\newE@e{+}%
  1620.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{+}%\E@a belegt
  1621.   \fi\advance\n@e 1 }
  1622. \def\u@stemup{%
  1623.   \ifnum\flaga<2 \u@stemdownstemup \else \u@stemupstemup \fi}
  1624. \def\u@stemdownstemup{\calslurwidth
  1625.   \advance\n@e-1
  1626.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
  1627.   \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
  1628.   \fi\advance\n@e 1 }
  1629. \def\u@stemupstemup{\calslurwidth
  1630.   \slurcor=-\H@a@cor}%E@a,E@e belegt
  1631. %
  1632. \def\l@leftrightbeaming{\ifnum\flaga<2 \l@stemup \else \l@stemdown \fi}
  1633. \def\l@stemup{%
  1634.   \ifnum\flagb<2 \l@stemupstemup \else \l@stemupstemdown \fi}
  1635. \def\l@stemupstemup{\calslurwidth
  1636.   \calslurcor{+}\newE@a{-}\newE@e{-}}
  1637. \def\l@stemupstemdown{\calslurwidth
  1638.   \advance\n@e-1
  1639.   \ifnum\n@e=\n@a \calslurcor{+}\newE@a{-}\newE@e{-}%
  1640.   \else\newslurwidth{1}{+}\calslurcor{+}\newE@a{-}%\E@e belegt
  1641.   \fi\advance\n@e 1 }
  1642. \def\l@stemdown{%
  1643.   \ifnum\flagb<2 \l@stemdownstemup \else \l@stemdownstemdown \fi}
  1644. \def\l@stemdownstemup{\calslurwidth
  1645.   \advance\n@e-1
  1646.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{+}\newE@a{-}\newE@e{-}%
  1647.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
  1648.   \fi\advance\n@e 1 }
  1649. \def\l@stemdownstemdown{\calslurwidth\slurcor=-\H@a@cor}%E@a,E@e belegt
  1650. %
  1651. %Sekantensteigung
  1652. \def\gradientslur#1#2{%
  1653.   \ifdim\E@a=\E@e \V@int=0 \V@=\z@%auswaehlen von angemessenen Boegen
  1654.   \else
  1655.     \V@ = \E@e \advance \V@ by -\E@a
  1656.     \ifdim\V@>\z@  \V@int=\V@ \else \V@int=-\V@ \fi
  1657.     \advance\V@int \V@int \advance\V@int \seminhh \divide \V@int by 2
  1658.     \divide \V@int by \seminhh
  1659.     \ifnum\V@int>8 \V@int=8 \else \ifnum\slurwidth<4
  1660.        \hc@i=\slurwidth \multiply \hc@i2
  1661.        \ifnum\hc@i<\V@int \V@int=\hc@i
  1662.        \fi\fi
  1663.     \fi
  1664.     \hd@i=\V@int\seminhh
  1665.     \ifdim\E@a#1\E@e \global\E@a=\E@e\global\advance\E@a#2\hd@i
  1666.          \else    \global\E@e=\E@a\global\advance\E@e#2\hd@i\fi
  1667.   \fi
  1668.   }
  1669. %
  1670. %Postitionierung und Bogensatz
  1671. \def\caluphrase{\ifnum\V@int=0
  1672.   \caltie{0}{3}{+}\else \calphrase{<}{+}{0}\fi}
  1673. \def\callphrase{\ifnum\V@int=0
  1674.   \caltie{1}{3}{-}\else \calphrase{>}{-}{1}\fi}
  1675. \def\caltie#1#2#3{\hd@i=\E@a \hd@ii=\tieconst\seminhh
  1676.     \advance\hd@ii\nhh
  1677.     \advance\hd@i #3\hd@ii
  1678.     \additem{}{\noexpand\phrase{#1}{\the\H@e}%
  1679.            {#2}{#2}{\the\hd@i}{\the\slurcor}}\in\elementlist\at\n@a}
  1680. \def\calphrase#1#2#3{%
  1681.     \ifdim\V@#1 \z@
  1682.     \hd@i=\phraseconst\seminhh \advance\hd@i\nhh
  1683.     \global\advance\E@a#2\hd@i
  1684.        \additem{}{\noexpand\phrase{#3}{\the\H@e}%
  1685.           {0}{\the\V@int}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
  1686. %          0 entspr. slur aus der ersten spalte im font Sconst
  1687.     \else
  1688.     \hd@i=\phraseconst\seminhh \advance\hd@i\seminhh
  1689.     \global\advance\E@a by #2\hd@i\relax
  1690.     \hd@i=\V@int\seminhh
  1691.     \global\advance\E@a by #2\hd@i \relax
  1692.        \additem{}{\noexpand\phrase{#3}{\the\H@e}%
  1693.           {\the\V@int}{0}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
  1694. %                      0 entspr. slur aus der ersten spalte im font
  1695.     \fi}
  1696. \def\phrase#1#2#3#4#5#6{\hc@i=#3\hc@ii=#4%
  1697.      $\raise#5\hbox to \z@{{\kern#6%
  1698.   \ifcase#1
  1699.      \vt@@{\hbox to #2 {\slurfont
  1700.      \vt@@{\char\hex2\the\hc@i}\r@lef@ill{\p@}\vt@@{\char\hex3\the\hc@ii}}}%
  1701.   \or
  1702.      \vb@@{\hbox to #2 {\slurfont
  1703.      \vb@@{\char\hex4\the\hc@i}\r@lef@ll{\p@}\vb@@{\char\hex5\the\hc@ii}}}%
  1704.   \fi
  1705.    \hss}}$}
  1706. %
  1707. \def\setslurs#1#2{\additem{}{\noexpand\setslur{#2}{#1}%
  1708.    {\the\E@a}{\the\slurcor}{\the\slurtoks}}\in\elementlist\at\n@a}
  1709. \def\setslur#1#2#3#4#5{\S@=#1\hc@i=#2%
  1710.    $\raise#3\hbox to \z@{{\kern#4\relax
  1711.    \ifnum\S@<0 \vt@@{\selectfont\char#5}\else
  1712.                \vb@@{\selectfont\char#5}\fi
  1713.    \hss}}$}
  1714. \def\selectfont{%
  1715.    \ifcase\hc@i\ifnum\S@<0\slurfontdu\else\slurfontuu\fi%0
  1716.            \or \ifnum\S@<0\slurfontdd\else\slurfontud\fi%1
  1717.            \or \slurfont \or \slurfont \fi}
  1718. %       **************************************************              %
  1719. %       *    Akzente fuer    Noten und Akkorde           *              %
  1720. %       **************************************************              %
  1721. %Abkuerzungen
  1722. \def\cantusfirmus{{\it c.f.}}
  1723. \def\crescendo{{\it cresc.}}
  1724. \def\dacapo{{\it d.c.}}
  1725. \def\dalsegno{{\it d.s.}}
  1726. \def\decrescendo{{\it decresc.}}
  1727. \def\diminuendo{{\it dim.}}
  1728. \def\fine{{\it fine}}
  1729. \def\forte{{\it f}}
  1730. \def\fortissimo{{\it ff}}
  1731. \def\fortissimoposs{{\it fff}}
  1732. \def\fortepiano{{\it fp}}
  1733. \def\forzato{{\it fz}}
  1734. \def\mezzoforte{{\it mf}}
  1735. \def\mezzopiano{{\it mp}}
  1736. \def\piano{{\it p}}
  1737. \def\pianissimo{{\it pp}}
  1738. \def\pianissimoposs{{\it ppp}}
  1739. \def\rallentando{{\it rall.}}
  1740. \def\rinforzando{{\it rfz.}}
  1741. \def\ritardando{{\it rit.}}
  1742. \def\ritenuto{{\it riten.}}
  1743. \def\sforzato{{\it sfz}}
  1744. \def\sforz{{\it sf}}
  1745. \def\staccato{{\it stacc.}}
  1746. \def\tacet{{\it tacet}}
  1747. \def\unisono{{\it unis.}}
  1748. %Plazierung der Spielanweisungen am Notenkopf
  1749. \def\noaccent{\setbox\akzentbox\null}
  1750. \def\stac{\setbox\akzentbox\hboxnhw{{\rm.}}{\box\akzentbox}}
  1751. \def\dec{{{\slurfont\char'160}}}
  1752. \def\staccatissimo{\setbox\akzentbox%
  1753.   \hboxnhw{$\ssize\prime$}{\box\akzentbox}}
  1754. \def\tr{\setbox\akzentbox\hboxnhw{{\rm{\it tr}}}{\box\akzentbox}}
  1755. \def\trbrack{\setbox\akzentbox\hboxnhw{{\rm({\it tr})}}{\box\akzentbox}}
  1756. \def\tenuto{\setbox\akzentbox\hboxnhw{{\vrule width \nhh height 1pt}}
  1757. {\box\akzentbox}}
  1758. \def\plus{\setbox\akzentbox=
  1759.          \hboxnhw{$\scriptscriptstyle+$}{\box\akzentbox}}
  1760. \def\setchordakzent{%
  1761.   \ifdim\wd\akzentbox=\z@\relax\else
  1762.   \iftwo \akzent@position \else
  1763.   \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
  1764.   \ifstemup\global\setbox\notebox=\hbox{$
  1765.   \raise \akzent@pos\hbox to \z@{\copy\akzentbox\hss}$\box\notebox}\else
  1766.   \global\setbox\notebox=\hbox{\box\notebox$
  1767.   \raise \akzent@pos\hbox to\z@{\hss\copy\akzentbox}$}\fi\fi}
  1768. \def\setakzent{%
  1769.   \ifdim\wd\akzentbox=\z@\relax\else
  1770.   \iftwo \akzent@position \else
  1771.   \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
  1772.   \global\setbox\notebox=\hboxnhw{\box\notebox}{$
  1773.   \raise \akzent@pos\hbox{\copy\akzentbox}$}\fi}
  1774. \def\u@akzent@position{\hc@i=\ht\notebox \divide\hc@i by \seminhh
  1775.   \ifnum\hc@i>7 \advance\hc@i 1 \else
  1776.     \ifodd\hc@i \advance \hc@i 2 \else \advance \hc@i 1\fi\fi
  1777.   \akzent@pos = \hc@i\seminhh\relax
  1778.   \ifgroup
  1779.   \global\E@u=\akzent@pos \global\advance\E@u\ht\akzentbox
  1780.   \global\advance\E@u\seminhh
  1781.   \ifdim\E@u<\z@ \global\advance \E@u-\I@@
  1782.   \else \global\advance \E@u \I@@ \fi\fi
  1783.   }
  1784. \def\l@akzent@position{\hc@i=\dp\notebox \divide\hc@i by \seminhh
  1785.   \ifdim\dp\notebox>\z@ \advance\hc@i 1 \akzent@pos= -\hc@i\seminhh
  1786.   \else
  1787.     \ifnum\pitch>2 \akzent@pos=\seminhh \else \akzent@pos=-\seminhh\fi\fi
  1788.   \advance\akzent@pos-\ht\akzentbox
  1789.   \ifgroup
  1790.   \global\E@l=\akzent@pos \global\advance\E@l-\seminhh
  1791.   \ifdim\E@l<\z@ \global\advance \E@l-\I@@
  1792.   \else \global\advance \E@l \I@@ \fi\fi}
  1793. %varable (De-)Crescendo - Zeichen
  1794. \def\cresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
  1795.   \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
  1796.   \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i = 16\fi\advance\hc@i95
  1797.   \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
  1798. \def\decresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
  1799.   \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
  1800.   \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i=16 \fi\advance\hc@i111
  1801.   \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
  1802. \def\setover#1#2{\vbox{\offinterlineskip\hbox{#1}\hbox{#2}}}
  1803. %       **************************************************              %
  1804. %       *    Textunterlage                               *              %
  1805. %       **************************************************              %
  1806. %                 Text oberhalb und unterhalb der Notenlinien
  1807. %- Eingabemacros
  1808. \def\^#1#{\set@above@parms{#1}\set@above@box}
  1809. \def\_#1#{\set@below@parms{#1}\set@below@box}
  1810. \def\a@tok{\^}\def\b@tok{\_}
  1811. %#1 n : Der Text soll nicht in die Berechnung einbezogen werden,
  1812. %#1 c : Der Text wird unterhalb der Notenbox zentriert und  nicht in
  1813. % die weitere Berechnung einbezogen
  1814. %#1 l: (linksbuendig) aber neuer spaceskip festgesetzt, Box ist so breit
  1815. %wie Text.
  1816. %#1 r: (rechtsbuendig) Box ist so breit wie Notenbox + ihr spaceskip
  1817. %der Rest wird links ueberstehen. sk veraendert.
  1818. \def\set@above@parms#1{\def\aresp{#1}\ifx\aresp\empty \def\aresp{x}\fi
  1819.          \overtext=\staffheight\advance\overtext by\nhh}
  1820. \def\set@below@parms#1{\def\bresp{#1}\ifx\bresp\empty \def\bresp{x}\fi
  1821.           \undertext=\textline}
  1822. \def\set@above@box#1{\hs@iv=\sk\setbox\hb@i=\hbox{\global\sk=\z@skip
  1823.  \strut\eightrm#1}\get@below@box}
  1824. \def\get@below@box#1#{\def\@B@{#1}\begingroup\aftergroup\set@below
  1825.      \ifx\@B@\b@tok\relax %\aftergroup#2
  1826.      \else\aftergroup e\aftergroup{\aftergroup}\fi
  1827.      \endgroup}
  1828. \def\set@below#1#{\set@below@parms{#1}\set@boxes}
  1829. \def\set@boxes#1#2{\setbox\hb@ii=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
  1830.   \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
  1831.   \hs@v=\sk \relax\hs@vi=\sk
  1832.   \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
  1833.   \ifvoid\hb@iii \global\sk=\z@skip \hbox{\u@text\l@text}\else #2\fi
  1834.   \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
  1835.   \def\l@text{\relax}\def\u@text{\relax}}
  1836. %
  1837. \def\set@below@box#1{\hs@iv=\sk\setbox\hb@ii=\hbox{\global\sk=\z@skip
  1838.  \strut\eightrm#1}\get@above@box}
  1839. \def\get@above@box#1#{\def\@A@{#1}\begingroup\aftergroup\set@above
  1840.   \ifx\@A@\a@tok\relax%\aftergroup#2
  1841.   \else\aftergroup e\aftergroup{\aftergroup}\fi\endgroup}
  1842. \def\set@above#1#{\set@above@parms{#1}\set@@boxes}
  1843. \def\set@@boxes#1#2{\setbox\hb@i=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
  1844.   \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
  1845.   \hs@v=\sk \relax\hs@vi=\sk
  1846.   \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
  1847.   \ifvoid\hb@iii\global\sk=\z@skip\hbox{\u@text\l@text}\else#2\fi
  1848.   \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
  1849.   \def\l@text{\relax}\def\u@text{\relax}}
  1850. \def\above#1{\ifdim\ht\hb@iii>\overtext \overtext = \ht\hb@iii
  1851.   \advance \overtext \seminhh \fi
  1852.   \if#1e\def\u@text{\relax}\else
  1853.   \if#1n\anorespect\else
  1854.     \if#1c\acrespect\else
  1855.       \if#1r\arrespect\else
  1856.         \if#1l\alrespect\else\aautoset\fi\fi\fi\fi\fi\nobreak}
  1857. \def\below#1{%
  1858.   \if#1e\def\l@text{\relax}\else
  1859.   \if#1n\bnorespect\else
  1860.     \if#1c\bcrespect\else
  1861.       \if#1r\brrespect\else
  1862.         \if#1l\blrespect\else
  1863.           \if#1v\bvrespect\else\bautoset\fi\fi\fi\fi\fi\fi\nobreak}
  1864. \def\anorespect{%
  1865.    \def\u@text{$\raise\overtext\hbox to\z@{\box\hb@i\hss}$}}
  1866. \def\acrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
  1867.   \setbox\hb@i\hbox to\hd@i{\hss\box\hb@i\hss}%
  1868.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
  1869. \def\arrespect{\hd@i=\wd\hb@iii
  1870.   \advance\hd@i by \hs@v \advance\hd@i by-\hs@iv
  1871.   \setbox\hb@i\hbox to \hd@i{\hss\box\hb@i}%
  1872.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}%
  1873.   \advance\hs@v by \nhh plus\nhh\relax}
  1874. \def\alrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
  1875.   \distance{\hd@i}{\wd\hb@i}\ifdim\hd@i>\wd\hb@i
  1876.   \hs@v=\Abs plus\nhh \fi
  1877.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
  1878. \def\bnorespect{%
  1879.   \def\l@text{$\lower\undertext\hbox to\z@{\box\hb@ii\hss}$}}
  1880. \def\bvrespect{\undertext=\ht\hb@ii\relax
  1881.   \ifdim\dp\hb@iii>\z@ \advance\undertext by\dp\hb@iii\fi\bnorespect}
  1882. \def\bcrespect{%
  1883.   \hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
  1884.   \setbox\hb@ii\hbox to\hd@i{\hss\box\hb@ii\hss}%
  1885.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
  1886. \def\brrespect{\hd@i=\wd\hb@iii
  1887.   \advance\hd@i by \hs@vi \advance\hd@i by-\hs@iv
  1888.   \setbox\hb@ii\hbox to \hd@i{\hss\box\hb@ii}%
  1889.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}%
  1890.   \advance\hs@vi by \nhh plus\nhh\relax}
  1891. \def\blrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
  1892.   \distance{\hd@i}{\wd\hb@ii}\ifdim\hd@i>\wd\hb@i
  1893.   \hs@vi=\Abs plus\nhh\relax \fi
  1894.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
  1895. \def\aautoset{\hd@i=\wd\hb@i \advance \hd@i-\wd\hb@iii
  1896.   \advance\hd@i-\hs@iv
  1897.    \ifdim\hd@i>\z@ \relax
  1898.     \ifdim\hd@i>0.75\hs@v \advance\hd@i-\hs@v
  1899.       \ifdim\hd@i<\hs@v \arrespect\else\alrespect\fi
  1900.     \else\acrespect\fi
  1901.   \else\anorespect\fi
  1902.   }
  1903. \def\bautoset{\hd@i=\wd\hb@ii \advance\hd@i-\wd\hb@iii
  1904.   \advance\hd@i-\hs@vi
  1905.   \ifdim\hd@i>\z@ \relax
  1906.     \ifdim\hd@i>\sk \advance\hd@i-\sk
  1907.       \ifdim\hd@i<\sk \brrespect\else\blrespect\fi
  1908.     \else\bcrespect\fi
  1909.   \else\bnorespect\fi
  1910.   }
  1911. %       **************************************************              %
  1912. %       *    Zweistimmige Notation in einem System       *              %
  1913. %       **************************************************              %
  1914. \def\two#1#2{{\def\stemdirectiondef{\relax}\twotrue
  1915.   \setbox\h@nkbox=\hbox{\box\hunkbox}%
  1916.   \hs@i=\sk  \global\sk=\z@skip
  1917.   \setbox\firstvoice\hbox{\stemuptrue
  1918.   \let\akzent@position=\u@akzent@position\direction{up}#1}%
  1919.   \hs@ii=\sk \global\sk=\z@skip
  1920.   \setbox\secondvoice\hbox{%
  1921.     \def\doteven{\dot@down}\let\akzent@position=\l@akzent@position
  1922.   \stemupfalse\direction{down}#2}%
  1923.   \hs@iii=\sk
  1924.   \hbox{\global\sk=\hs@i\sethunkglue
  1925.     \box\h@nkbox\ifdim\wd\firstvoice<\wd\secondvoice
  1926.     \hd@i=\wd\firstvoice\global\sk=\z@skip\box\firstvoice\hskip-\hd@i
  1927.     \global\sk=\z@skip\box\secondvoice\global\sk=\hs@iii\else
  1928.     \hd@i=\wd\secondvoice\global\sk=\z@skip\box\secondvoice\hskip-\hd@i
  1929.     \global\sk=\z@skip\box\firstvoice\global\sk=\hs@ii\fi}\twofalse}}
  1930. %       **************************************************              %
  1931. %       *    Beginn    und Ende                          *              %
  1932. %       **************************************************              %
  1933. %Material fuer die Ueberschrift eines Musikstueckes
  1934. \def\comp@{\hbox{}} %Komponist
  1935. \def\poet@{\hbox{}} % Texter
  1936. \def\title@{\hbox{}}% Titel
  1937. \def\voice@{\hbox{}}%Text zu Beginn der ersten Notenzeile
  1938. \def\composer#1{\def\comp@{\hbox{\eightrm #1}}}
  1939. \def\poet#1{\def\poet@{\hbox{\eightrm#1}}}
  1940. \def\title#1{\def\title@{\hbox{\bf#1}}}
  1941. \def\voice#1{\def\voice@{\hbox to \parindent{\offinterlineskip
  1942.   \hss\vbox to \staffheight{\vfil\hbox{\rm#1}\vfil}\hss}}}
  1943. %Zusammensetzen der Ueberschrift
  1944. \def\headings{\par\hbox to \hsize{\hss\title@\hss}%
  1945.   \hbox to \hsize {\poet@\hss\comp@}%
  1946.   \def\comp@{\hbox{}}\def\poet@{\hbox{}}\def\title@{\hbox{}}}
  1947. %Rahmen \beginsong ...... \endsong
  1948. \outer\def\beginsong#1#2{\headings\par\nointerlineskip
  1949.   \begingroup\inisong
  1950.   \global\signtoks={}\global\cleftoks={}%
  1951.   \noaccent
  1952.   \baselines\parskip\staffheight plus 0.5\staffheight \relax
  1953.   \firsttrue\indent\llap{\voice@}%
  1954.   \firstlines#1#2\firstfalse\music}
  1955. \def\endsong{\break\null\par\endgroup\def\voice@{\hbox{}}\global\sk=0pt}
  1956. \outer\def\ende{\endsong\end}
  1957. %       **************************************************              %
  1958. %       *    Defaults                                    *              %
  1959. %       **************************************************              %
  1960. %Defaults zu Beginn des Musikstueckes
  1961. \def\inidefaults{\let\dotdown=\dot@down
  1962.   \def\helplist{}%
  1963.   \global\minsl=3 \nhh
  1964.   \let\na=\n@a \let\nee=\n@e
  1965.   \def\beamlist{\\{\the\n@a-\the\n@e,}}%
  1966. % Minimal moegliche Halslaenge bei Verbalkung - Anfangsbelegung
  1967.   \n@a=1}
  1968. %Diese k"onnen nicht in \beginsong .... \endsong eingebettet werden
  1969. %da sonst keine Aenderung moeglich
  1970.   \universal
  1971.   \normalbaselines
  1972. \catcode`@ = 12
  1973. %\let\baselines = \baselinesa   %fuer Einbettung einzeiliger Beispiele
  1974.                                %in Text
  1975. \let\baselines = \baselinesb  %fuer mehrzeilige Beispiele
  1976. \rm
  1977.